SQL Server 2000 DTS - 无法解决与操作相等的排序规则冲突

时间:2009-10-05 11:31:16

标签: sql sql-server tsql sql-server-2000 dts

我有一个SQL Server 2000 DTS包。

此程序包的其中一个步骤具有以下SQL:

SELECT *
FROM [Crocus_Limited$OrderRequestDetail]
WHERE (rep_updated > GETDATE() -2) 
AND NOT EXISTS

(SELECT OrderID 
FROM NavisionUpgrade.navision4.dbo.[WEBOrderDetails] rd 
WHERE rd.OrderID =     [Crocus_Limited$OrderRequestDetail].OrderID 
AND rd.NavisionItemNo = [Crocus_Limited$OrderRequestDetail].NavisionItemNo )

失败 - 给我错误: 无法解决与操作相等的排序规则冲突。

此DTS基本上将数据从一个数据库移动到另一个数据库(位于不同的地理位置)

如何更改上述查询以解决此问题?

2 个答案:

答案 0 :(得分:2)

您的一个或两个连接列包含char数据类型(char,nchar,varchar,nvarchar),它存储在每个数据库中不兼容的排序规则中。

您可以指定要在任何字符串比较中使用的排序规则。最简单的方法是指定运行查询的机器的默认排序规则(我猜测NavisionItemNo是问题列):

...AND rd.NavisionItemNo collate database_default = [Crocus_Limited$OrderRequestDetail].NavisionItemNo collate database_default )

修改

OrderID也是varchar列吗?如果是这样,请尝试

...WHERE rd.OrderID collate database_default = [Crocus_Limited$OrderRequestDetail].OrderID collate database_default
AND rd.NavisionItemNo collate database_default = [Crocus_Limited$OrderRequestDetail].NavisionItemNo ) collate database_default

答案 1 :(得分:0)

正如前两篇文章所述,您必须对每个非数字列使用collat​​e属性,但要查看目标数据库的排序规则并使用此排序规则(例如SQL_Latin_CI_AS)。请注意,即使列可以进行其他排序,表也可以拥有自己的排序规则,因此请仔细查看定义。

和平,祝你好运   冰