COLLATE (Transact-SQL)
データベース定義または列定義に適用して照合順序を定義したり、文字列式に適用して照合順序キャストを適用することができる句です。
構文
COLLATE { <collation_name> | database_default }
<collation_name> :: =
{ Windows_collation_name } | { SQL_collation_name }
引数
collation_name
式、列定義、またはデータベース定義に適用する照合順序の名前を指定します。collation_name に指定できるのは、指定された Windows_collation_name または SQL_collation_name だけです。collation_name はリテラル値である必要があります。collation_name を変数または式で表すことはできません。Windows_collation_name は Windows 照合順序名の照合順序名です。
SQL_collation_name は SQL Server 照合順序名の照合順序名です。
データベース定義レベルで照合順序を適用している場合、Unicode 専用の Windows 照合順序を COLLATE 句で使用することはできません。
database_default
COLLATE 句によって、現在のデータベースの照合順序が継承されます。
説明
COLLATE 句は、さまざまなレベルで指定できます。指定できるレベルは次のとおりです。
データベースの作成または変更
CREATE DATABASE または ALTER DATABASE ステートメントの COLLATE 句を使用して、データベースの既定の照合順序を指定できます。SQL Server Management Studio を使用してデータベースを作成するときに、照合順序も指定できます。照合順序を指定しない場合、SQL Server のインスタンスの既定の照合順序がデータベースに指定されます。
注 Unicode 専用の Windows 照合順序は、COLLATE 句で nchar、nvarchar、および ntext の各データ型を列レベルおよび式レベルのデータに適用する場合にのみ使用できます。COLLATE 句でデータベースまたはサーバー インスタンスの照合順序を変更するために使用することはできません。
テーブル列の作成または変更
CREATE TABLE または ALTER TABLE ステートメントの COLLATE 句を使用して、文字型の各列に対して照合順序を指定できます。SQL Server Management Studio を使用してテーブルを作成するときに、照合順序も指定できます。照合順序を指定しない場合、列には、データベースの既定の照合順序が指定されます。
また、COLLATE 句の database_default オプションを使用して、一時テーブルの列で、tempdb の代わりに、接続に対する現在のユーザー データベースの既定の照合順序が使用されるように指定することもできます。
式の照合順序のキャスト
COLLATE 句を使用して、文字式を特定の照合順序に適用できます。文字リテラルと変数には、現在のデータベースの既定の照合順序が指定されます。列参照には、列の既定の照合順序が指定されます。式の照合順序については、「照合順序の優先順位 (Transact-SQL)」を参照してください。
識別子の照合順序は、識別子が定義されているレベルによって異なります。ログイン名やデータベース名など、インスタンスレベルのオブジェクトの識別子には、インスタンスの既定の照合順序が指定されます。テーブル名、ビュー名、列名など、データベース内のオブジェクトの識別子には、データベースの既定の照合順序が指定されます。たとえば、大文字と小文字においてのみ名前が異なる 2 つのテーブルを作成する場合、大文字と小文字が区別される照合順序が指定されたデータベースでは作成できますが、大文字と小文字が区別されない照合順序が指定されたデータベースでは作成できません。詳細については、「識別子」を参照してください。
接続コンテキストが 1 つのデータベースに関連付けられたときに変数、GOTO ラベル、一時ストアド プロシージャおよび一時テーブルを作成し、コンテキストを別のデータベースに切り替えたときに、それらを参照することができます。変数、GOTO ラベル、一時ストアド プロシージャ、および一時テーブルの各識別子は、サーバー インスタンスの既定の照合順序に従います。
COLLATE 句は、char、varchar、text、nchar、nvarchar、および ntext データ型に対してだけ適用できます。
COLLATE は collate_name を使用して、式、列定義、データベース定義に適用される SQL Server 照合順序または Windows 照合順序の名前を参照します。collation_name に指定できるのは、指定された Windows_collation_name または SQL_collation_name だけで、パラメーターにはリテラル値を含める必要があります。collation_name を変数または式で表すことはできません。
照合順序は、通常、照合順序名によって識別します。ただし、セットアップ時は例外です。セットアップ時には、Windows 照合順序にルート照合順序指定子 (照合ロケール) を指定してから、大文字と小文字の区別やアクセントの区別に関する並べ替えオプションを指定します。
システム関数の fn_helpcollations を実行すると、Windows 照合順序および SQL Server 照合順序のすべての有効な照合順序名の一覧を取得できます。
SELECT *
FROM fn_helpcollations()
SQL Server は、動作しているオペレーティング システムがサポートしているコード ページのみをサポートすることができます。照合順序に依存するアクションを実行する場合、参照されるオブジェクトが使用する SQL Server 照合順序は、コンピューター上で実行されているオペレーティング システムがサポートしているコード ページを使用する必要があります。このようなアクションには、次のものがあります。
データベースの作成または変更時に、データベースの既定の照合順序を指定する。
テーブルの作成または変更時に、列の照合順序を指定する。
データベースの復元または接続を行う場合、データベースの既定の照合順序、およびデータベース内の char 型、varchar 型、および text 型の任意の列またはパラメーターの照合順序は、オペレーティング システムでサポートされている必要があります。
コード ページ変換は char および varchar データ型に対してはサポートされていますが、text データ型に対してはサポートされていません。コード ページ変換時のデータ損失はレポートされません。
指定した照合順序、または参照先のオブジェクトで使用される照合順序で、Windows でサポートされていないコード ページが使用されていると、SQL Server でエラーが表示されます。
例
A. 選択時に照合順序を指定する
次の例では、簡単なテーブルを作成し、4 行を挿入します。次に、テーブルからデータを選択するときに 2 つの照合順序を適用し、Chiapas の並べ替えがどのように異なるかを示します。
CREATE TABLE Locations
(Place varchar(15) NOT NULL);
GO
INSERT Locations(Place) VALUES ('Chiapas');
INSERT Locations(Place) VALUES ('Colima');
INSERT Locations(Place) VALUES ('Cinco Rios');
INSERT Locations(Place) VALUES ('California');
GO
--Apply an typical collation
SELECT Place FROM Locations
ORDER BY Place
COLLATE Latin1_General_CS_AS_KS_WS ASC;
GO
-- Apply a Spanish collation
SELECT Place FROM Locations
ORDER BY Place
COLLATE Traditional_Spanish_ci_ai ASC;
GO
B. その他の例
COLLATE を使用するその他の例については、CREATE DATABASE (Transact-SQL) の例「G. データベースを作成し、照合順序名とオプションを指定する」、および ALTER TABLE (Transact-SQL) の例「V. 列の照合順序を変更する」を参照してください。