我的存储过程中有一段代码如下 -
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"在等于操作。"第一行代码。
表中的列-sCheckedOut - tblexpwitretrocmdocs具有排序规则SQL_AltDiction_CP850_CI_AS。因此,为了使列-sEditor与它兼容,我将temp表定义如下 -
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
)
我仍然得到同样的错误。请帮我解决这个问题。
答案 0 :(得分:1)
要解决排序规则冲突,请在“=”运算符周围添加“COLLATE DATABASE_DEFAULT”关键字,如下所示:
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) COLLATE DATABASE_DEFAULT
AND A.sid COLLATE DATABASE_DEFAULT NOT IN
(SELECT SID COLLATE DATABASE_DEFAULT FROM tblexpwitdocumentgeneral)
希望这会有所帮助......
答案 1 :(得分:0)
为所有临时表字符串列的排序规则指定DATABASE_DEFAULT
以使用当前数据库默认排序规则:
CREATE TABLE #tblDocs(
iId INT IDENTITY (1,1),
SID NVARCHAR(50) COLLATE DATABASE_DEFAULT,
iDocumentTypeId INT,
sType NVARCHAR(200) COLLATE DATABASE_DEFAULT,
sEditor NVARCHAR(50) COLLATE DATABASE_DEFAULT
);
对于与数据库默认排序规则不同的列,请指定精确的列排序规则,而不是DATABASE_DEFAULT
。