2017-07-18 4 views
0

は、私は、しかし、私はこのエラーを取得しています、異なるデータベース(同じサーバー)内の異なるテーブルからJOIN 2列にクエリを必要とします2つのテーブルの比較TSQLクエリでCOLLATEを使用すると永続的な変更が行われますか?</p> <blockquote> <p>Cannot resolve the collation conflict between "A" and "B" in the equal to operation.</p> </blockquote> <p>エラーは、私が作ってるんだしたクエリの行に由来:

私はCOLLATEを使用して両方の比較値に同じ照合があることを確認できますが、これらのテーブルに永続的な影響があるかどうかは不明です。他のアプリケーション用です。

例:「CAST」のようなCOLLATEの

SELECT t1.value1, t1.value2, t2.value3 
FROM db1.dbo.tbl1 AS t1 
JOIN db2.dbo.tbl2 AS t2 ON t1.ID = t2.ID 
+0

Nope。可能であれば照合を変更して操作と同等の処理を行います。永久に何かを変更することはありません。 https://docs.microsoft.com/en-us/sql/t-sql/statements/collat​​ions – Leonidas199x

+0

コード例を表示できますか? – whisk

+0

@whisk例を追加しましたが、必要なクエリ自体が非常に一般的です。 – user1676874

答えて

1

と思う...あなたは、両方の照合順序は同じにすると、適切な操作を行うことができるように、ちょうど、「この照合として、この文字列を解釈する」と言っています比較する。あなたの例から

SELECT t1.value1, t1.value2, t2.value3 
    FROM db1.dbo.tbl1 AS t1 
     INNER JOIN JOIN db2.dbo.tbl2 AS t2 
     ON t1.ID COLLATE DATABASE_DEFAULT = t2.ID COLLATE DATABASE_DEFAULT 

ここで私はちょうどあなたが望む(とあなたがいずれかの列の照合順序を使用している場合、あなただけの必要な方の照合例照合...使用として「DATABASE_DEFAULT」を使用ONE COLLATEステートメント...その他のステートメント)。

意味がありますか?

0

質問に答えるには、まずは同じページにいることを確認してください。私たちは、カップルのテーブルから始めましょう: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 - 列の照合順序が永久に変更されます。影響は劇的であるか、まったく影響がない可能性があります(私はあなたのアプリケーションについて十分に分かりません)。

関連する問題

 関連する問題