一括挿入を使用してデータを挿入する一時テーブルがあります。ただし、一時テーブルから通常のテーブルにデータを更新する場合、照合の問題が発生します。私は次のようなものを使用してこれを解決する方法を知っています:
UPDATE RegularTable
SET r.Column1 = t.ColumnA
FROM RegularTable r INNER JOIN #TEMP t ON
r.Column1 COLLATE DATABASE_DEFAULT =
t.ColumnA COLLATE DATABASE_DEFAULT
しかし、結合で照合を使用する必要がないように、一時テーブルに照合をすぐに設定する方法はありますか?何かのようなもの:
CREATE TABLE #TEMP
Column1 varchar(255) COLLATE database_default,
Column2 varchar(60)
これは正しいコーディングですか?テーブルごとまたは列ごとに照合を1回設定する必要がありますか?そして、照合順序がテーブルに設定されている場合、その照合順序を結合から除外できますか?
記述した構文を使用して、一時テーブル定義でCOLLATE database_default
を使用できます。これにより、各列の照合順序がデータベースと互換性を持つようになります。
列ごとに明示的に設定する必要があります。テーブルレベルの既定の照合順序はありません。データベースレベルの既定の照合順序がありますが、tempdb
の場合、これは常にmodel
データベースの既定の照合順序と同じです。これは、既定ではサーバーの照合順序です。
テーブル列に照合を設定した場合でも、既に経験したように、クエリでそれをオーバーライドできます。
今、同じ問題に遭遇しました。各一時テーブルの結合に照合順序を追加する代わりに、一時テーブルの作成をテーブル変数宣言に変更しました。