データベースAのテーブルAのカラムAの値がとデータベースBのテーブルBのカラムBに含まれるレコードのみアップデートしたいとき以下のようなクエリを実行したとする
UPDATE [データベースA].[スキーマ].[テーブル名A]
SET [カラムX] = 'hoge'
WHERE
[カラムA] IN (
SELECT [カラムB]
FROM [データベースB].[スキーマ].[テーブル名B]
)
すると以下のようなエラーが発生することがある
equal to 操作の "japanese_ci_as" と "japanese_xjis_100_ci_as" 間での照合順序の競合を解決できません。
上記のエラーは データベースBの照合順序が"japanese_ci_as"でありデータベースAの照合順序が"japanese_xjis_100_ci_as"に設定されているため起きる
エラー解消のためには データベースBのカラムB から取得した値の照合順序を COLLATE句で"japanese_xjis_100_ci_as"に設定してやればよい
UPDATE [データベースA].[dbo].[テーブル名]
SET [カラムX] = 'hoge'
WHERE
[カラムA] IN (
SELECT [カラムB] COLLATE Japanese_XJIS_100_CI_AS --データベースAの照合順序を指定する
FROM [データベースB].[dbo].[テーブル名B]
)
参考サイト
https://learn.microsoft.com/ja-jp/sql/t-sql/statements/collations?view=sql-server-ver16