COLLATE (Transact-SQL)

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

データベースまたはテーブル列の照合順序、または文字列式に適用されたときの照合順序のキャスト操作を定義します。 照合順序名には、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 Data Warehouse では、COLLATE ステートメントの SELECT 句は無制限であり、サポートされていない照合順序で適用できます。 Microsoft Fabric Data Warehouse では、既定では、すべてのウェアハウスが大文字と小文字を区別する (CS) 照合順序 Latin1_General_100_BIN2_UTF8構成されます。 大文字と小文字を区別しない (CI) 照合順序 こともできます。

ただし、サポートされている照合順序は、COLLATECREATE TABLEALTER TABLE ADD nullable column、および SELECT INTO (CTAS) ステートメントの CREATE TABLE AS SELECT 句でのみ使用できます。

database_defaultCOLLATE節が現在のデータベースの照合を継承します。

解説

COLLATE節は複数のレベルで定義できます。 これらには、次のものが含まれます。

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

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

    Note

    Windows Unicodeのみの照合は、nchar、nvarchar、ntextのデータ型に対して、列レベルおよび式レベルのデータに対して、ncharnvarchar、ntextのデータ型に照合を適用するためにCOLLATE節と組み合わせて使用できません。これらはCOLLATE節と組み合わせてデータベースやサーバーインスタンスの照合を定義または変更することはできません。

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

    各文字列の列ごとに、CREATE TABLE文やALTER TABLE文のCOLLATE節を使ってコレーションを指定することができます。 SQL Server Management Studio を使用してテーブルを作成するときに、照合順序も指定できます。 照合順序を指定しない場合、列にはデータベースの既定の照合順序が割り当てられます。

    また、COLLATE節の database_default オプションを使って、一時テーブルの列を接続に対して現在のユーザーデータベースの照合デフォルトをtempdbではなく使用するように指定することもできます。

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

    COLLATE節を使って特定のコレーションにキャラクター式を適用できます。 文字リテラルと変数には、現在のデータベースの既定の照合順序が指定されます。 列参照には、列の既定の照合順序が指定されます。

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

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

COLLATE節はcharvarchartextncharnvarcharntextのデータ型にのみ適用可能です。

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 DATABASEALTER TABLEを参照してください。