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

问题描述 投票:1回答:5

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

我试图用不同的排序规则对表进行排序,但是没有用。我该如何解决。

sql-server sql-server-2008-r2
5个回答
6
投票

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


1
投票
Where A.QuestionId = B.QuestionId COLLATE SQL_Latin1_General_CP1_CI_AS And

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

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

1
投票

连接具有不同归类的表时,只需使用以下语法,


1
投票

要克服此问题,请使用以下代码:


0
投票

要克服此问题,请使用以下代码:

SELECT NAME
FROM sys.objects
WHERE NAME COLLATE DATABASE_DEFAULT NOT IN (SELECT TYPE  
FROM sys.objects)
© www.soinside.com 2019 - 2024. All rights reserved.