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した値に設定してください。
以上です。