COLLATE (Transact-SQL)

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL データベース はいAzure SQL Managed Instance はいAzure Synapse Analytics はいParallel Data Warehouse

データベースまたはテーブル列の照合順序、または文字列式に適用されたときの照合順序のキャスト操作を定義します。 照合順序名には、Windows 照合順序名または SQL 照合順序名を指定できます。 データベースの作成時に指定しない場合は、データベースに SQL Server インスタンスの既定の照合順序が割り当てられます。 テーブル列の作成時に指定しない場合、データベースの既定の照合順序に列が割り当てられます。

トピック リンク アイコン Transact-SQL 構文表記規則

構文

COLLATE { <collation_name> | database_default }
<collation_name> :: =
    { Windows_collation_name } | { SQL_collation_name }

注意

SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

collation_name 式、列定義、またはデータベース定義に適用する照合順序の名前です。 collat​​ion_name には、指定された Windows_collat​​ion_name または SQL_collat​​ion_name のみを指定できます。 collation_name はリテラル値である必要があります。 collation_name を変数または式で表すことはできません。

Windows_collation_name は、「Windows 照合順序名」の照合順序名です。

SQL_collation_name は、「SQL Server 照合順序名」の照合順序名です。

database_default COLLATE 句によって、現在のデータベースの照合順序が継承されます。

解説

COLLATE 句は、さまざまなレベルで指定できます。 これらには、次のものが含まれます。

  1. データベースの作成または変更

    CREATE DATABASE または ALTER DATABASE ステートメントの COLLATE 句を使用して、データベースの既定の照合順序を指定できます。 SQL Server Management Studio を使用してデータベースを作成するときに、照合順序も指定できます。 照合順序を指定しない場合、SQL Server のインスタンスの既定の照合順序がデータベースに指定されます。

    注意

    Unicode 専用の Windows 照合順序は、COLLATE 句で ncharnvarchar、および ntext の各データ型を列レベルおよび式レベルのデータに適用する場合にのみ使用できます。COLLATE 句でデータベースまたはサーバー インスタンスの照合順序を定義または変更するために使用することはできません。

  2. テーブル列の作成または変更

    CREATE TABLE または ALTER TABLE ステートメントの COLLATE 句を使用して、文字型の各列に対して照合順序を指定できます。 SQL Server Management Studio を使用してテーブルを作成するときに、照合順序も指定できます。 照合順序を指定しない場合、列には、データベースの既定の照合順序が指定されます。

    また、COLLATE 句の database_default オプションを使用して、一時テーブルの列で、tempdb の代わりに、接続に対する現在のユーザー データベースの既定の照合順序が使用されるように指定することもできます。

  3. 式の照合順序のキャスト

    COLLATE 句を使用して、文字式を特定の照合順序に適用できます。 文字リテラルと変数には、現在のデータベースの既定の照合順序が指定されます。 列参照には、列の既定の照合順序が指定されます。

識別子の照合順序は、識別子が定義されているレベルによって異なります。 ログイン名やデータベース名など、インスタンスレベルのオブジェクトの識別子には、インスタンスの既定の照合順序が指定されます。 テーブル名、ビュー名、列名など、データベース内のオブジェクトの識別子には、データベースの既定の照合順序が指定されます。 たとえば、大文字と小文字においてのみ名前が異なる 2 つのテーブルを作成する場合、大文字と小文字が区別される照合順序が指定されたデータベースでは作成できますが、大文字と小文字が区別されない照合順序が指定されたデータベースでは作成できません。 詳細については、「データベース識別子」を参照してください。

接続コンテキストが 1 つのデータベースに関連付けられたときに変数、GOTO ラベル、一時ストアド プロシージャおよび一時テーブルを作成し、コンテキストを別のデータベースに切り替えたときに、それらを参照することができます。 変数、GOTO ラベル、一時ストアド プロシージャ、および一時テーブルの各識別子は、サーバー インスタンスの既定の照合順序に従います。

COLLATE 句は、charvarchartextncharnvarchar、および ntext データ型にのみ適用できます。

COLLATE は collate_name を使用して、式、列定義、データベース定義に適用される SQL Server 照合順序または Windows 照合順序のいずれかの名前を参照します。 collation_name に指定できるのは、指定された Windows_collation_name または SQL_collation_name だけで、パラメーターにはリテラル値を含める必要があります。 collation_name を変数または式で表すことはできません。

照合順序は、通常、照合順序名によって識別します。ただし、セットアップ時は例外です。 セットアップ時には、Windows 照合順序にルート照合順序指定子 (照合ロケール) を指定してから、大文字と小文字の区別やアクセントの区別に関する並べ替えオプションを指定します。

システム関数の fn_helpcollations を実行すると、Windows 照合順序および SQL Server 照合順序のすべての有効な照合順序名の一覧を取得できます。

SELECT name, description
FROM fn_helpcollations();

SQL Server は、動作しているオペレーティング システムがサポートしているコード ページのみをサポートすることができます。 照合順序に依存するアクションを実行する場合、参照されるオブジェクトが使用する SQL Server 照合順序は、コンピューター上で実行されているオペレーティング システムがサポートしているコード ページを使用する必要があります。 このようなアクションには、次のものがあります。

  • データベースの作成または変更時に、データベースの既定の照合順序を指定する。
  • テーブルの作成または変更時に、列の照合順序を指定する。
  • データベースの復元または接続を行う場合、データベースの既定の照合順序、およびデータベース内の char 型、varchar 型、および text 型の任意の列またはパラメーターの照合順序は、オペレーティング システムでサポートされている必要があります。

注意

コード ページ変換は char および varchar データ型に対してはサポートされていますが、text データ型に対してはサポートされていません。 コード ページ変換時のデータ損失はレポートされません。

指定した照合順序、または参照先のオブジェクトで使用される照合順序で、Windows でサポートされていないコード ページが使用されていると、SQL Server でエラーが表示されます。

A. SELECT 時に照合順序を指定する

次の例では、単純なテーブルを作成し、4 つの行を挿入します。 次に、テーブルからデータを選択するときに 2 つの照合順序を適用して、Chiapas が異なる方法で格納されることを示します。

CREATE TABLE Locations
(Place varchar(15) NOT NULL);
GO
INSERT Locations(Place) VALUES ('Chiapas'),('Colima')
                             , ('Cinco Rios'), ('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

最初のクエリからの結果を次に示します。

Place
-------------
California
Chiapas
Cinco Rios
Colima

2 番目のクエリからの結果を次に示します。

Place
-------------
California
Cinco Rios
Colima
Chiapas

B. 追加の例

COLLATE を使用するその他の例については、「CREATE DATABASE」の例「G. データベースを作成し、照合順序名とオプションを指定する」と「ALTER TABLE」の例「V. 列の照合順序を変更する」を参照してください。

関連項目