0

我有一个 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 基本上将数据从一个数据库移动到另一个数据库(位于不同的地理位置)

我怎样才能改变上述查询来解决这个问题?

4

2 回答 2

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
于 2009-10-05T11:44:49.200 回答
0

正如前两篇文章所提到的,您必须对每个非数字列使用 collat​​e 属性,但请查看目标数据库的排序规则并使用此排序规则(例如 SQL_Latin_CI_AS)。请注意,一个表可以有它自己的排序规则,即使一列也可以有另一个排序规则,因此请深入了解您的定义。

和平与好运冰

于 2009-11-15T21:33:45.440 回答