【发布时间】:2015-10-21 10:54:48
【问题描述】:
我的存储过程中有一段代码如下 -
update tblexpwitretrocmdocs set sCheckedOut = A.sEditor, idone = 0
from #tblDocs A
JOIN tblexpwitretrocmdocs B ON A.SID = B.SID
where A.iDocumentTypeId in (16,17,13,11)
and A.sid not in (select SID COLLATE SQL_AltDiction_CP850_CI_AS from tblexpwitdocumentgeneral)
我收到错误“无法解决等于操作中“SQL_AltDiction_CP850_CI_AS”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突。”第一行代码。
表 - tblexpwitretrocmdocs 中的列 - sCheckedOut 具有排序规则 SQL_AltDiction_CP850_CI_AS。因此,为了使列 - sEditor 与其兼容,我将临时表定义如下 -
CREATE TABLE #tblDocs(
iId INT IDENTITY (1,1),
SID NVARCHAR(50) COLLATE SQL_AltDiction_CP850_CI_AS,
iDocumentTypeId INT,
sType NVARCHAR(200),
sEditor NVARCHAR(50) COLLATE SQL_AltDiction_CP850_CI_AS
)
我仍然遇到同样的错误。请帮我解决这个问题。
【问题讨论】:
-
排序规则冲突可能来自
NOT IN谓词。试试 -AND A.sid not in (select SID COLLATE SQL_AltDiction_CP850_CI_AS from tblexpwitdocumentgeneral) -
感谢 Gareth,这适用于给定的代码。但现在我不得不稍微更改更新查询,错误仍然存在。你能告诉我还有什么需要改变的吗?我已经更新了上面的代码。
-
错误现在来自 JOIN 谓词
JOIN tblexpwitretrocmdocs B ON A.SID = B.SID---- 再次尝试 ---JOIN tblexpwitretrocmdocs B ON A.SID = B.SID COLLATE SQL_AltDiction_CP850_CI_AS-- 如果您在 SSMS 中运行这些查询,然后双击错误消息它实际上会将您带到有问题的行,然后您只需要添加显式排序规则即可解决错误。 -
谢谢加雷斯!现在工作正常。
标签: sql-server sql-server-2005