SQL Serverで照合順序が異なる列を結合する場合の注意点について、簡単にまとめておこうと思います。
サンプルデータ
まずは、本記事内で扱うサンプルデータをご紹介します。
検証のために照合順序の設定が異なる2つのデータベースを用意したいと思います。
1つは、照合順序が「Japanese_CI_AS」のSampleAデータベースです。

もう1つは、照合順序が「Japanese_90_BIN2」のSampleBデータベースです。

照合順序は列レベルでも定義することができますが、デフォルトはデータベースの照合順序となります。そのため、SampleAデータベースで作成するテーブルの列の照合順序は「Japanese_CI_AS」になり、SampleBデータベースで作成するテーブルの列の照合順序は「Japanese_90_BIN2」となります。
上記の前提の元、以下のテーブルとデータを用意します。
-- SampleAデータベースで作成 CREATE TABLE [dbo].[Table_1] ( [ID] [varchar](50) NULL, [Name] [varchar](50) NULL ); INSERT INTO [dbo].[Table_1] ([ID] ,[Name]) VALUES ('1', '一郎'), ('2', '二郎'), ('3', '三郎'); -- SampleBデータベースで作成 CREATE TABLE [dbo].[Table_1] ( [ID] [varchar](50) NULL, [Age] [varchar](50) NULL ); INSERT INTO [dbo].[Table_1] ([ID] ,[Age]) VALUES ('1', '35'), ('2', '25'), ('3', '10');
上記の照合順序が異なるテーブル同士を結合してみて、挙動を確認したいと思います。
照合順序が異なる列の結合を試してみる
SampleAデータベースのTable_1テーブルと、SampleBデータベースのTable_1テーブルをID列で結合してそれぞれのデータを取得してみたいと思います。
SELECT * FROM [SampleA].[dbo].[Table_1] t1 INNER JOIN [SampleB].[dbo].[Table_1] t2 ON t1.ID = t2.ID ;
実行すると以下の通り、エラーとなってしまいました。このように、照合順序が異なる列を結合した場合はエラーになります。

照合順序が異なる列を結合した場合のエラーを回避する方法
照合順序が異なる列を結合した場合は、エラーになることがわかりました。
データベースを再作成して、照合順序を合わせるという方法もありますが、それができない場合もあると思います。そういったケースでエラーを回避する方法があります。
実は、COLLATEを使用することでエラーを回避できます。以下のように、結合するキーのところに記述できます。
SELECT * FROM [SampleA].[dbo].[Table_1] t1 INNER JOIN [SampleB].[dbo].[Table_1] t2 ON t1.ID = t2.ID COLLATE Japanese_CI_AS ;
実行結果は以下のとおりです。エラーにならずにデータを想定通り取得することができました。

COLLATEは、照合順序を指定のものに変換することができる句です。結合するカラムが少ない場合は、上記のようにピンポイントで照合順序を指定することでエラーを回避することができます。
おわりに
いかがでしたでしょうか。
同じデータベース内で照合順序が異なることの可能性は低いと思いますが、今回の記事のようにデータベースが異なると照合順序が異なる場合も十分にあると思います。頭の片隅にでも覚えておきたいですね。
今回はこの辺で。最後までお読みいただきありがとうございました。