データベース識別子

データベース オブジェクトの名前は識別子と呼ばれます。 Microsoft SQL Server内のすべてのものが識別子を持つことができます。 サーバーやデータベース、またはテーブル、ビュー、列、インデックス、トリガー、プロシージャ、制約、規則などのデータベース オブジェクトに対して識別子を割り当てることができます。 ほとんどのオブジェクトには識別子が必要です。ただし、制約などの一部のオブジェクトについては、識別子は省略可能です。

オブジェクトの識別子は、オブジェクトを定義するときに作成されます。 作成された識別子を使用して、そのオブジェクトを参照できます。 たとえば、次のステートメントは識別子が TableXであるテーブル 1 つと、識別子がそれぞれ KeyColDescriptionである 2 つの列を作成します。

CREATE TABLE TableX  
(KeyCol INT PRIMARY KEY, Description nvarchar(80))  

このテーブルには名前のない制約も含まれます。 PRIMARY KEY 制約には識別子がありません。

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

Note

変数名、関数およびストアド プロシージャのパラメーター名は、Transact-SQL 識別子の規則に従っている必要があります。

識別子のクラス

識別子のクラスには、次の 2 種類があります。

通常の識別子
識別子の形式に関する規則に準拠します。 通常の識別子は、Transact-SQL ステートメントで使用される場合は区切りません。

SELECT *  
FROM TableX  
WHERE KeyCol = 124  

区切られた識別子
二重引用符 (") または角かっこ ([ ]) で囲みます。 識別子の形式に関する規則に従っている識別子は、区切らなくてもかまいません。 例えば次が挙げられます。

SELECT *  
FROM [TableX]         --Delimiter is optional.  
WHERE [KeyCol] = 124  --Delimiter is optional.  

識別子のすべての規則に準拠していない識別子は、Transact-SQL ステートメントで区切る必要があります。 例えば次が挙げられます。

SELECT *  
FROM [My Table]      --Identifier contains a space and uses a reserved keyword.  
WHERE [order] = 10   --Identifier is a reserved keyword.  

標準識別子および区切られた識別子は、文字、記号 (_ @ #)、および数字を含む 1 ~ 128 個の文字で構成されます。 ローカル一時テーブルの場合、識別子は 116 文字以下でなければなりません。

標準識別子の規則

変数、関数、およびストアド プロシージャの名前は、次の Transact-SQL 識別子の規則に従っている必要があります。

  1. 最初の文字は、次のいずれかである必要があります。

    • Unicode 規格 3.2 で定義されている文字。 文字の Unicode 定義には、a から z、A から Z までのラテン文字と、他の言語の文字も含まれます。

    • アンダースコア (_)、アット マーク (@)、または番号記号 (#)。

      SQL Server では、識別子の先頭にある一定の記号には特別な意味があります。 アットマークで始まる通常の識別子は、常にローカル変数またはパラメーターを表し、他の種類のオブジェクトの名前として使用することはできません。 番号記号で始まる識別子は一時テーブルまたは一時プロシージャを表します。 二重番号記号 (##) で始まる識別子は、グローバル一時オブジェクトを表します。 他の種類のオブジェクトの名前を開始するには、番号記号または二重番号記号を使用できますが、この方法はお勧めしません。

      一部の Transact-SQL 関数には、二重記号 (@@) で始まる名前があります。 これらの関数との混乱を避けるために、@@で始まる名前を使用しないでください。

  2. 後続の文字には、次の文字を含めることができます。

    • Unicode 規格 3.2 で定義されている文字

    • Basic Latin スクリプトまたはその他の各国スクリプトの 10 進数の数値

    • アット マーク、ドル記号 ($)、数字記号、またはアンダースコア。

  3. Transact-SQL 予約語を識別子として使用することはできません。 SQL Server の予約語は、大文字、小文字ともに予約されています。 Transact-SQL ステートメントで識別子を使用する場合、これらの規則に準拠していない識別子は、二重引用符または角かっこで区切る必要があります。 予約語は、データベースの互換性レベルによって異なります。 このレベルは、 ALTER DATABASE ステートメントを使用して設定できます。

  4. 埋め込みスペースまたは特殊文字は使用できません。

  5. 補助文字は使用できません。

Transact-SQL ステートメントで識別子を使用する場合、これらの規則に準拠していない識別子は、二重引用符または角かっこで区切る必要があります。

Note

標準識別子の形式に関する規則は、データベースの互換性レベルに応じて異なります。 このレベルは、 ALTER DATABASEを使用して設定できます。

こちらもご覧ください

ALTER TABLE (Transact-SQL)
CREATE DATABASE(SQL Server Transact-SQL)
CREATE DEFAULT (Transact-SQL)
CREATE PROCEDURE (Transact-SQL)
CREATE RULE (Transact-SQL)
CREATE TABLE (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
CREATE VIEW (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
DELETE (Transact-SQL)
INSERT (Transact-SQL)
予約済みキーワード (Transact-SQL)
SELECT(Transact-SQL)
UPDATE (Transact-SQL)