无法解决" SQL_AltDiction_CP850_CI_AS"之间的整理冲突和" SQL_Latin1_General_CP1_CI_AS"等于操作

时间:2015-10-21 10:54:49

标签: sql-server sql-server-2005

我的存储过程中有一段代码如下 -

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 
)

我仍然得到同样的错误。请帮我解决这个问题。

2 个答案:

答案 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