我有一个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基本上将数据从一个数据库移动到另一个数据库(位于不同的地理位置)
如何更改上述查询以解决此问题?
答案 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)
正如前两篇文章所述,您必须对每个非数字列使用collate属性,但要查看目标数据库的排序规则并使用此排序规则(例如SQL_Latin_CI_AS)。请注意,即使列可以进行其他排序,表也可以拥有自己的排序规则,因此请仔细查看定义。
和平,祝你好运 冰