0

SQL Server2000DTSパッケージがあります。

このパッケージのステップの1つには、次の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 )

失敗しています-エラーが発生しました:equaloperationの照合の競合を解決できません。

このDTSは基本的に、あるDBから別のDB(地理的に異なる場所にある)にデータを移動します

これを解決するために上記のクエリを変更するにはどうすればよいですか?

4

2 に答える 2

2

結合列の 1 つまたは両方に、各データベースの互換性のない照合に格納されている 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

前の 2 つの投稿では、すべての非数値列に collat​​e 属性を使用する必要があると述べていますが、ターゲット データベースの照合を見て、この照合 (SQL_Latin_CI_AS など) を使用する必要があります。列が別の照合を持つことができる場合でも、テーブルは独自の照合を持つことができることに注意してください。そのため、定義を詳しく調べてください。

平和と幸運のアイス

于 2009-11-15T21:33:45.440 に答える