次の方法で共有


COLLATE (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW) Microsoft Fabric のウェアハウス

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

Transact-SQL 構文表記規則

構文

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

引数

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 照合順序名」の照合順序名です。

Note

Microsoft Fabric で使用できる照合順序は、Latin1_General_100_BIN2_UTF8のみです。

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

解説

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

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

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

    Note

    Windows Unicode のみの照合順序は、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 型の任意の列またはパラメーターの照合順序は、オペレーティング システムでサポートされている必要があります。

Note

コード ページ変換は 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 a 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
-- Using LIKE
SELECT Place FROM Locations
WHERE Place COLLATE Latin1_General_CI_AS LIKE 'C%' ASC; 
GO

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

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

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

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

3 番目の SELECt クエリの結果を次に示します。

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

B. 追加の例

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