質問に答えるには、まずは同じページにいることを確認してください。私たちは、カップルのテーブルから始めましょう:TABLE1に
CREATE TABLE dbo.table1(someText varchar(20)); -- uses default collation: SQL_Latin1_General_CP1_CI_AS
CREATE TABLE dbo.table2(someText varchar(20) collate Latin1_General_BIN);
someTxtは私のサーバーの既定の照合順序(SQL_Latin1_General_CP1_AS)を使用しています。 table2の同じ列には、Latin1_General_BINが使用されています。
このクエリでは、表示されているエラーが表示されます。
SELECT *
FROM dbo.table1 t1
JOIN dbo.table2 t2
ON t1.someText = t2.someText;
エラー:
Msg 468, Level 16, State 9, Line 23 Cannot resolve the collation conflict between "Latin1_General_BIN" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation.
このエラーを解決するためにCOLLATEを使用するには、2つの一般的な方法があります。
オプション1 - あなたの検索で
オプションが2 - テーブル定義を変更する ここでは、COLLATEを使用してtable1の列をtable2の列と一致するように変更します。
ALTER TABLE dbo.table1
ALTER column someText varchar(20) collate Latin1_General_BIN;
これでクエリで照合順序を定義する必要はありません。
ご質問
I understand I can use COLLATE to make sure both compared values have the same collation, but I was wondering if this has any kind of permanent effect on those tables, as in a permanent collation change, given they are needed as they are for other applications.
あなたはオプション1で行くならば、答えはNO です。このようにCOLLATEを使用すると、テーブルを変更することはありません。オプション2を指定すると、YES - 列の照合順序が永久に変更されます。影響は劇的であるか、まったく影響がない可能性があります(私はあなたのアプリケーションについて十分に分かりません)。
Nope。可能であれば照合を変更して操作と同等の処理を行います。永久に何かを変更することはありません。 https://docs.microsoft.com/en-us/sql/t-sql/statements/collations – Leonidas199x
コード例を表示できますか? – whisk
@whisk例を追加しましたが、必要なクエリ自体が非常に一般的です。 – user1676874