識別子列の作成と変更

更新 : 2006 年 4 月 14 日

識別子列と GUID 列は 1 つのテーブルにつきそれぞれ 1 つだけ作成できます。

IDENTITY プロパティ

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

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

  • IDENTITY プロパティを使用して定義された列は、1 つのテーブルにつき 1 つしか作成できません。また、その列は decimalintnumericsmallintbigint、または tinyint データ型を使用して定義する必要があります。
  • シードと増分を指定できます。既定では、どちらも 1 です。
  • 識別子列は NULL 値を許容しない列として定義する必要があります。また、DEFAULT 定義も DEFAULT オブジェクトも指定できません。
  • IDENTITY プロパティを設定すると、選択リスト内で $IDENTITY キーワードを使用して識別子列を参照できます。また、この列は、名前で参照することもできます。
  • テーブルに IDENTITY 列があるかどうかを調べるには OBJECTPROPERTY 関数を使用し、IDENTITY 列の名前を調べるには COLUMNPROPERTY 関数を使用します。
  • SET IDENTITY_INSERT を使用して、値が明示的に挿入されるようにすると、列の IDENTITY プロパティを無効にできます。
    ms191131.note(ja-jp,SQL.90).gifメモ :
    頻繁に削除が行われるテーブルに識別子列がある場合は、ID 値間にギャップが生じることがあります。削除された ID 値が再利用されないためです。ID 値間にギャップが生じないようにするには、IDENTITY プロパティを使用しないでください。IDENTITY プロパティを使用する代わりに、行が挿入されるときに識別子列の既存の値に基づいて新しい識別子を決定するトリガを作成してください。

グローバル一意識別子

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

ROWGUIDCOL プロパティを設定すると、選択リスト内で $ROWGUID キーワードを使用して GUID 列を参照できます。これは、$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)

参照

概念

オートナンバーと識別子列
uniqueidentifier データの使用

その他の技術情報

COLUMNPROPERTY (Transact-SQL)
NEWID (Transact-SQL)
OBJECTPROPERTY (Transact-SQL)
uniqueidentifier (Transact-SQL)
ID 列のレプリケート

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 4 月 14 日

変更内容 :
  • ROWGUID 列での UNIQUE 制約の使用に関する内容を削除しました。
  • ROWGUIDCOL プロパティを使用する目的を明確にしました。
新しい内容 :
  • GUID 列の作成時に使用する関数として、NEWID の他に NEWSEQUENTIALID を追加しました。
  • GUID 列を含むテーブルの作成例を追加しました。

2005 年 12 月 5 日

新しい内容 :
  • 既存のテーブルに対する識別子列の追加に関する情報を追加し、既存の列には IDENTITY プロパティを追加できないことを明記しました。