SQL Server 无法解决等于运算中“Latin1_General_CI_AI”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突

bjp0bcyl  于 2023-02-07  发布在  其他
关注(0)|答案(6)|浏览(256)

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

我试着用不同的排序规则对表进行排序,但没有成功。我该如何解决这个问题。

pu3pd22g

pu3pd22g1#

这可能会有帮助,像这样更改where条件

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

vtwuwzda2#

既然你提到了每个表中的QuestionID都是varchar,那么很可能是它们之间的比较,所以猜测一下,试着改变这行:

Where A.QuestionId = B.QuestionId  And

致:

Where A.QuestionId = B.QuestionId COLLATE SQL_Latin1_General_CP1_CI_AS And

我更希望您对表使用正确的连接语法--但那是以后的事了;-)

eqqqjvef

eqqqjvef3#

请尝试使用以下命令,其中字段名COLLATEDATABASE_DEFAULT =第二个字段名COLLATEDATABASE_DEFAULT
这是工作

rsl1atfo

rsl1atfo4#

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

where  A.QuestionId collate SQL_Latin1_General_CP1_CI__AS = B.QuestionId collate
SQL_Latin1_General1_General_CP1_CI_AS
5lwkijsr

5lwkijsr5#

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

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

dxpyg8gm6#

我在迁移数据库和服务提供商转移服务器后也遇到了同样的问题。因此,作为解决方案,我使用CPanel创建了新的数据库,然后执行SQL查询,以恢复模式和数据。最后,这个问题得到了解决。

相关问题