SQLSever

【SQLServer】自動発番(identity)の使い方

SQLServerで自動発番(identityプロパティ)の使い方をまとめたので、ここにメモしておきます。

identityプロパティを設定すると、データを登録(INSERT)した時に自動で値を発番して登録してくれます。

identityプロパティを設定する

identityプロパティの設定はテーブル作成時のCreate文で指定します。

以下が設定例になります。

create table SAMPLE_TABLE (
  ID numeric(19, 0) identity not null
  , CD varchar(255)
  , NAME varchar(255) not null
  , SORT numeric(10, 0) not null
  , CREATEDBY_ID numeric(19, 0)
  , CREATEDBY_DATE datetime default getdate() not null
  , LAST_MODIFIEDBY_ID numeric(19, 0)
  , LAST_MODIFIED_DATE datetime default getdate() not null
  , primary key (ID)
);

「ID」のカラムにidentityプロパティを設定して自動発番にしています。

注意点として、以下のような制約があります。

  • identityプロパティは1テーブルに対して1カラムのみ
  • identityプロパティは数値型のみ設定可能
  • identityプロパティにNULLは登録できない

文字列型を指定すると以下のようなエラーメッセージが表示されます。

 エラーメッセージ
ID列'列名称'は、小数点以下桁数が0のint、bigint、smalint、tinyint、decimalまたはnumeric型にしてください。また、NULL値は許可されません。

 

identityプロパティを確認

既存のテーブルに対して、identityプロパティを確認するためには以下のクエリを発行してください。

-- NORESEEDプロパティを設定
DBCC CHECKIDENT('テーブル名', NORESEED);
-- SAMPLE_TABLEというテーブル名に対して確認
SELECT IDENT_CURRENT('SAMPLE_TABLE') AS ID;

 

identityプロパティをリセット/変更する

現状のidentityプロパティをリセット、または変更する場合は以下のクエリを発行すれば可能です。

-- SAMPLE_TABLEテーブルのidentityをリセット
DBCC CHECKIDENT('SAMPLE_TABLE', RESEED, 1)
--SAMPLE_TABLEテーブルのidentityの現在値を「50」に設定
DBCC CHECKIDENT('SAMPLE_TABLE', RESEED, 50)

※identityを変更する場合、変更した次の値から発番されるので、変更した値にマイナス1した値に設定してください

以上です。

-SQLSever