次の方法で共有


識別子

更新 : 2006 年 12 月 12 日

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

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

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

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

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

識別子のクラス

識別子のクラスには、次の 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 文字以下でなければなりません。

標準識別子に関する規則

標準識別子の形式に関する規則は、データベースの互換性レベルにより異なります。互換性レベルは、sp_dbcmptlevel を使用して設定できます。互換性レベルが 90 の場合、次の規則が適用されます。

  1. 最初の文字が次のいずれかである必要があります。
    • Unicode 規格 3.2 で定義されている文字。Unicode の文字定義には、各国言語の文字の他に、ラテン文字 a ~ z と A ~ Z も含まれます。
    • アンダースコア (_)、アット マーク (@)、または番号記号 (#)。
      SQL Server では、識別子の先頭にある一定の記号には特別な意味があります。アット マークで始まる標準識別子は、常にローカル変数またはローカル パラメータを表し、他の種類のオブジェクトの名前としては使用できません。番号記号で始まる識別子は一時テーブルまたは一時プロシージャを表します。2 つの番号記号 (##) で始まる識別子は、グローバルな一時オブジェクトを表します。1 つまたは 2 つの番号記号で始まる名前を、他の種類のオブジェクトの名前として使用することもできますが、このような番号記号の使用はお勧めしません。
      一部の Transact-SQL 関数の名前は、2 つのアット マーク (@@) から始まります。これらの関数との混同を避けるために、@@ から始まる名前は使用しないでください。
  2. 名前の先頭以外では、次の文字を使用できます。
    • Unicode 規格 3.2 で定義されている文字
    • Basic Latin スクリプトまたはその他の各国スクリプトの 10 進数
    • アット マーク、ドル記号 ($)、番号記号、またはアンダースコア
  3. Transact-SQL 予約語を識別子として使用することはできません。SQL Server の予約語は、大文字、小文字共に予約されています。
  4. 埋め込み型スペースおよび特殊文字は使用できません。
  5. 補助文字は使用できません。

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

ms175874.note(ja-jp,SQL.90).gifメモ :
変数名およびストアド プロシージャのパラメータ名は、必ず標準識別子の規則に従う必要があります。

参照

概念

区切られた識別子 (データベース エンジン)

その他の技術情報

ALTER TABLE (Transact-SQL)
CREATE DATABASE (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)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 12 月 12 日

新しい内容 :
  • 標準識別子で補助文字を使用できないというルールを追加しました。

2006 年 4 月 14 日

変更内容 :
  • 標準識別子での特殊文字の使用方法を明確にしました。