3

我正在尝试在 SQL Server 2008R2 中创建一个过程,但它显示此错误

无法解决等于操作中“Latin1_General_CI_AI”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突。

我创建的程序是

CREATE Procedure Ps_Quiz_OnlineTest_QuestionsWithOptions_Get --'Ques1'
  @Ques Varchar(8000)
As        
Begin

  Select 
    A.QuestionId, 
    A.QsnDesc, 
    A.CorrectOption, 
    B.OptionValue, 
    A.Marks,
    (
      Select QsnName 
      From Quiz_tblQsnsLimitMaster
      Where QsnId = @Ques) QuesPaper,
    (
      Select Durationoftest 
      From Quiz_tblQsnsLimitMaster
      Where QsnId = @Ques) QuesPaper
    From 
      Quiz_tblQsnCreationMaster A, 
      Quiz_tblQsnCreationDetail B        
    Where 
      A.QuestionId = B.QuestionId
      And A.QuestionId In (
        Select QuestionIds 
        From FN_Question_Answers_Quiz(@Ques))
      And B.QuestionId In (
        Select QuestionIds 
        From FN_Question_Answers_Quiz(@Ques))  
    Order By 
      A.QuestionId, 
      B.OptionOrder 

End    

我试图用不同的排序规则整理表格,但没有奏效。我该如何解决这个问题。

4

5 回答 5

10

可能这可能会有所帮助,像这样改变你的 where 条件

Where A.QuestionId COLLATE DATABASE_DEFAULT = B.QuestionId  COLLATE DATABASE_DEFAULT
于 2013-10-21T06:54:20.193 回答
3

由于您提到每个表中的 QuestionID 都是 varchar,因此可能是它们之间的比较。因此,猜测一下,尝试更改行:

Where A.QuestionId = B.QuestionId  And

到以下:

Where A.QuestionId = B.QuestionId COLLATE SQL_Latin1_General_CP1_CI_AS And

如果您对表使用正确的连接语法,我会更喜欢它 - 但那是另一天;-)

于 2013-08-06T11:46:34.947 回答
1

加入具有不同排序规则的表时,只需使用以下语法,

where  A.QuestionId collate SQL_Latin1_General_CP1_CI__AS = B.QuestionId collate
SQL_Latin1_General1_General_CP1_CI_AS
于 2014-06-03T13:13:14.750 回答
1

尝试使用它,其中 fieldname COLLATE DATABASE_DEFAULT = secondfieldname COLLATE DATABASE_DEFAULT

这是有效的

于 2015-06-25T11:43:32.363 回答
0

为了克服这个问题,请使用以下代码:

SELECT NAME
FROM sys.objects
WHERE NAME COLLATE DATABASE_DEFAULT NOT IN (SELECT TYPE  
FROM sys.objects)
于 2019-02-12T12:58:42.523 回答