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

时间:2013-08-06 10:36:27

标签: sql-server sql-server-2008-r2

我正在尝试在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    

我尝试整理具有不同排序规则的表格,但它没有奏效。 我该怎么解决这个问题呢。

5 个答案:

答案 0 :(得分:4)

可能这可能会有所帮助,改变你喜欢的地方

Where A.QuestionId COLLATE DATABASE_DEFAULT = B.QuestionId  COLLATE DATABASE_DEFAULT

答案 1 :(得分:1)

试试这个, 其中fieldname COLLATE DATABASE_DEFAULT = secondfieldname COLLATE DATABASE_DEFAULT

这是有效的

答案 2 :(得分:0)

由于您已经提到每个表中的QuestionID都是varchar,因此可能是它们之间的比较。所以在猜测时,请尝试更改该行:

Where A.QuestionId = B.QuestionId  And

以下内容:

Where A.QuestionId = B.QuestionId COLLATE SQL_Latin1_General_CP1_CI_AS And

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

答案 3 :(得分:0)

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

其中A.QuestionId整理SQL_Latin1_General_CP1_CI__AS = B.QuestionId整理SQL_Latin1_General1_General_CP1_CI_AS

答案 4 :(得分:0)

要解决此问题,请使用以下代码:

SELECT NAME
FROM sys.objects
WHERE NAME COLLATE DATABASE_DEFAULT NOT IN (SELECT TYPE  
FROM sys.objects)