HOME >> Tips >> Microsoft SQL Server

SQL Server で自動採番を使用する方法

2014/8/10
文書番号:20316

SQL Server で自動採番を使用する方法について。
Oracle で言うところの 「SEQUENCE」 は SQL Server では列の定義として使用することができます。
テーブル内の数値型の列の設定で自動採番を指定すると行を追加するたびにインクリメントされ、新しい番号を採番してくれます。

Oracle のように採番するオブジェクトが独立していないので複数のテーブルにまたがった一意な番号を採番しようとすると工夫が必要です。


【設定手順】

  1. テーブルを作成する際、もしくはデザインの変更で連番にする数値型の列のプロパティを設定します。
    「IDENTITY の設定」を展開し、「(IDである)」プロパティを「はい」に設定します。

    クリックで拡大

  2. 「(IDである)」プロパティを「はい」に設定すると「IDの増分」と「IDENTITYシード」(初期値)を設定できるようになります。
    必要に応じて設定をし、保存します。

    クリックで拡大

  3. テーブルを確認すると、IDに設定した列は読み取り専用になっていることがわかります。
    ここに直接値を設定することはできません。

    クリックで拡大

  4. このテーブルに対するINSERT処理では、IDに指定した列以外の列に値を更新します。

    クリックで拡大

  5. IDに指定した列は自動採番されて更新されます。

    クリックで拡大

  6. ※IDの最大値は列のデータ型によります。

【IDの桁あふれ(オーバーフロー)】

    IDが最大値に達したら新しいIDを採番できずエラーになります。
    
    メッセージ 8115、レベル 16、状態 1、行 1
    IDENTITY をデータ型 decimal に変換中に、算術オーバーフロー エラーが発生しました。
    算術オーバーフローが発生しました。
    

    クリックで拡大


    IDに設定している列の桁を増やすことができるのであればそうするか、IDをリセットする必要があります。

【IDをリセットする手順】

  1. IDに指定した列の値をリセットする方法です。
    以下のSQLを実行してリセットすることができます。
    
    DBCC CHECKIDENT (<テーブル名> ,RESEED ,0)
    
    最後の数字がリセットする値です。この場合は「0」になります。
    任意の値を指定することでIDを飛ばして採番することもできます。

    クリックで拡大