識別子列の作成と変更

識別子列を使用して、自動的に増分する ID 番号をテーブル内に作成することができます。識別子列と GUID 列は 1 つのテーブルにつきそれぞれ 1 つだけ作成できます。

IDENTITY プロパティ

識別子列は IDENTITY プロパティを使用して実装できます。これにより、アプリケーションを開発するときに、テーブルに挿入された最初の行の ID 番号 (Identity Seed プロパティ) とシードに加算する増分 (Identity Increment プロパティ) を指定して、連続する ID 番号を決定できます。識別子列があるテーブルに値が挿入されると、データベース エンジンがシードに増分を加算して次の ID 値を自動的に生成します。既存のテーブルに識別子列を追加すると、テーブルの既存の行に ID 番号が追加されます。シード値と増分値は、これらの行が最初に挿入されたときの順序で適用されます。ID 番号は、追加される新しい行に対しても生成されます。既存のテーブル列を変更して IDENTITY プロパティを追加することはできません。

IDENTITY プロパティを使用して識別子列を定義する場合は、次の点を考慮してください。

  • IDENTITY プロパティを使用して定義された列は、1 つのテーブルにつき 1 つしか作成できません。また、その列は decimal、int、numeric、smallint、bigint、または tinyint データ型を使用して定義する必要があります。

  • シードと増分を指定できます。既定では、どちらも 1 です。

  • 識別子列は NULL 値を許容しない列として定義する必要があります。また、DEFAULT 定義も DEFAULT オブジェクトも指定できません。

  • IDENTITY プロパティを設定すると、選択リスト内で $IDENTITY キーワードを使用して識別子列を参照できます。また、この列は、名前で参照することもできます。

  • テーブルに IDENTITY 列があるかどうかを調べるには OBJECTPROPERTY 関数を使用し、IDENTITY 列の名前を調べるには COLUMNPROPERTY 関数を使用します。

  • SET IDENTITY_INSERT を使用して、値が明示的に挿入されるようにすると、列の IDENTITY プロパティを無効にできます。

    注意

    頻繁に削除が行われるテーブルに識別子列がある場合は、ID 値間にギャップが生じることがあります。削除された ID 値が再利用されないためです。ID 値間にギャップが生じないようにするには、IDENTITY プロパティを使用しないでください。IDENTITY プロパティを使用する代わりに、行が挿入されるときに識別子列の既存の値に基づいて新しい識別子を決定するトリガを作成してください。

グローバル一意識別子

IDENTITY プロパティを設定すると、各テーブル内で各行に自動的に番号が付けられますが、複数のテーブル (それぞれ固有の識別子列を持つテーブル) 間で、重複する値が生成される可能性があります。これは、IDENTITY プロパティが一意であることが保証されるのは、このプロパティが使用されているテーブル内のみであるためです。データベース全体、または世界中のネットワーク コンピュータ上の全データベースを通じて一意な識別子列を生成する必要があるアプリケーションでは、uniqueidentifier 型と NEWID 関数または NEWSEQUENTIALID() 関数を使用してください。また、ROWGUIDCOL プロパティを適用して、新しい列が行 GUID 列であることを示すこともできます。IDENTITY プロパティで定義された列と異なり、データベース エンジンは uniqueidentifier 型の列に対して自動的に値を生成しません。グローバルに一意な値を挿入するには、NEWID または NEWSEQUENTIALID 関数を使用してグローバルに一意な値を生成する DEFAULT 定義を GUID 列に作成してください。詳細については、「uniqueidentifier データの使用」を参照してください。

ROWGUIDCOL プロパティを持つ列は、選択リスト内で $ROWGUID キーワードを使用して参照できます。これは、$IDENTITY キーワードを使用して IDENTITY 列を参照できるのと同様です。1 つのテーブルに作成できる ROWGUIDCOL 列は 1 つだけです。また、この列は uniqueidentifier 型を使用して定義する必要があります。テーブルに ROWGUIDCOL 列があるかどうかを調べるには OBJECTPROPERTY (Transact-SQL) 関数を使用し、ROWGUIDCOL 列の名前を調べるには COLUMNPROPERTY (Transact-SQL) 関数を使用します。

次の例では、uniqueidentifier 列を主キーとして含むテーブルを作成します。この例では、DEFAULT 制約で NEWSEQUENTIALID() 関数を使用して新しい行の値を提供します。また、$ROWGUID キーワードを使用して参照できるように、この uniqueidentifier 列に ROWGUIDCOL プロパティを適用します。

CREATE TABLE dbo.Globally_Unique_Data
    (guid uniqueidentifier CONSTRAINT Guid_Default DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
    Employee_Name varchar(60)
    CONSTRAINT Guid_PK PRIMARY KEY (guid) );

テーブルの作成時に新しい識別子列を作成するには

CREATE TABLE (Transact-SQL)

既存のテーブルに新しい識別子列を作成するには

ALTER TABLE (Transact-SQL)

識別子列を削除するには

ALTER TABLE (Transact-SQL)

テーブルから列を削除する方法 (Visual Database Tools)

ID 列に関する情報を取得するには

sys.identity_columns (Transact-SQL)

IDENT_INCR (Transact-SQL)

IDENT_SEED (Transact-SQL)

指定したテーブルの現在の ID 値を調べて修正するには

DBCC CHECKIDENT (Transact-SQL)

新しいシード値を設定するには

DBCC CHECKIDENT (Transact-SQL)