テーブルの特定の列に対して異なる照合順序を指定し、次のいずれかを使用して、 char、 varchar、 text、 nchar、 nvarchar、および ntext データのデータベース照合順序をオーバーライドできます。
COLLATE 句は CREATE TABLE と ALTER TABLE に含まれます。 例えば次が挙げられます。
CREATE TABLE dbo.MyTable (PrimaryKey int PRIMARY KEY, CharCol varchar(10) COLLATE French_CI_AS NOT NULL ); GO ALTER TABLE dbo.MyTable ALTER COLUMN CharCol varchar(10)COLLATE Latin1_General_CI_AS NOT NULL; GOSQL Server Management Studio。 詳細については、 照合順序と Unicode のサポートに関するページを参照してください。
SQL Server 管理オブジェクト (SMO) で
Column.Collationプロパティを使用する。
次のいずれかによって現在参照されている列の照合順序を変更することはできません。
計算列
インデックス
自動的に生成されるか、CREATE STATISTICS ステートメントによって生成される分散統計
CHECK 制約
外部キー制約
tempdb を使用する場合、COLLATE 句には、一時テーブル内の列が tempdb の照合順序ではなく、接続において現在のユーザー データベースの照合順序の既定値を使用するように指定する database_default オプションが含まれています。
照合順序とテキスト列
照合順序がデータベースの既定の照合順序のコード ページとは異なる text 列に値を挿入または更新できます。 SQL Server は、値を列の照合順序に暗黙的に変換します。
照合順序と tempdb
tempdb データベースは、SQL Server が起動されるたびに構築され、モデル データベースと同じ既定の照合順序を持ちます。 これは通常、インスタンスの既定の照合順序と同じです。 ユーザー データベースを作成し、 モデルとは異なる既定の照合順序を指定した場合、ユーザー データベースの既定の照合順序は tempdb とは異なります。 すべての一時ストアド プロシージャまたは一時テーブルが作成され、 tempdb に格納されます。 つまり、一時テーブル内のすべての暗黙的な列、および一時ストアド プロシージャ内のすべての強制可能な既定の定数、変数、およびパラメーターには、永続的なテーブルおよびストアド プロシージャで作成された同等のオブジェクトとは異なる照合順序があります。
これにより、ユーザー定義データベースとシステム データベース オブジェクト間の照合順序の不一致に関する問題が発生する可能性があります。 たとえば、SQL Server のインスタンスは Latin1_General_CS_AS 照合順序を使用し、次のステートメントを実行します。
CREATE DATABASE TestDB COLLATE Estonian_CS_AS;
USE TestDB;
CREATE TABLE TestPermTab (PrimaryKey int PRIMARY KEY, Col1 nchar );
このシステムでは、 tempdb データベースはコード ページ 1252 のLatin1_General_CS_AS照合順序を使用し、 TestDB および TestPermTab.Col1 コード ページ 1257 で Estonian_CS_AS 照合順序を使用します。 例えば次が挙げられます。
USE TestDB;
GO
-- Create a temporary table with the same column declarations
-- as TestPermTab
CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, Col1 nchar );
INSERT INTO #TestTempTab
SELECT * FROM TestPermTab;
GO
前の例では、 tempdb データベースはLatin1_General_CS_AS照合順序を使用し、 TestDB および TestTab.Col1 は Estonian_CS_AS 照合順序を使用します。 例えば次が挙げられます。
SELECT * FROM TestPermTab AS a INNER JOIN #TestTempTab on a.Col1 = #TestTempTab.Col1;
tempdb は既定のサーバー照合順序を使用していますが、TestPermTab.Col1 は異なる照合順序を使用しているため、SQL Serverは次のエラーを返します。「'Latin1_General_CI_AS_KS_WS' と 'Estonian_CS_AS' の照合順序の間で競合を解決できません。」
エラーを回避するには、次のいずれかの方法を使用します。
一時テーブル列で 、tempdb ではなく、ユーザー データベースの既定の照合順序を使用することを指定します。 これにより、システムで必要な場合は、一時テーブルを複数のデータベースで同様に書式設定されたテーブルで操作できます。
CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, Col1 nchar COLLATE database_default );#TestTempTab列の正しい照合順序を指定します。CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, Col1 nchar COLLATE Estonian_CS_AS );
こちらもご覧ください
サーバーの照合順序を設定または変更する
データベースの照合順序を設定または変更する
照合順序と Unicode のサポート