3

このクエリは2つのデータベースのテーブルを使用するため、データベース間の照合の問題を回避するために照合ヒントを指定する必要がある以下のクエリを使用しています。

メッセージ468、レベル16、状態9、行12「Latin1_General_CS_AI」と「Latin1_General_CS_AS」の間の照合の競合をequal操作で解決できません。

現在、異なる照合で異なるデータベースを使用するクエリのいくつかを実行すると、照合の競合について上記のエラーが発生します。

Delete from table1 where oldcolumn in
(
select newcolumn from Database2.dbo.table2
where invoiceid = @invno
and complete = 0
)

以下のように照合ヒントを含めるようにクエリを変更しました。

Delete from table1 where oldcolumn COLLATE SQL_Latin1_General_CP1_CS_AS in
(
select newcolumn from Database2.dbo.table2
where invoiceid = @invno
and complete = 0
)
  1. 上記のクエリは照合の問題を解決しますか?
  2. 演算子の左側または右側に照合ヒントを指定するのは同じですか(例: "="演算子)?
  3. これまでのようにクエリをinvoiceid = @invno実行すると、ランタイム照合の競合エラーが発生しますか?

注:上記の2つのデータベースのいずれにもアクセスできず、スクリプトは実際のデータベースで実行されるため、この質問をしています。

4

1 に答える 1

0

以下のクエリを使用:

DELETE FROM Table1
WHERE Table1.ID IN (
                SELECT Table1.ID
                FROM Table1
                INNER JOIN Database2.dbo.Table2 Table2 ON Table2.NewColumn = Table1.OldColumn COLLATE SQL_Latin1_General_CP1_CS_AS
                WHERE   Table2.invoiceid = @invno
                    AND Table2.complete = 0
                )
于 2012-06-05T05:00:20.310 に答える