我正在尝试在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
我尝试整理具有不同排序规则的表格,但它没有奏效。 我该怎么解决这个问题呢。
答案 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)