Tableの主キーにIdentityの定義をすると、Insertする際にキーを指定する必要がなくなりますし、ビジネスロジック側で自動採番をする必要もなくなります。そして、データを追加する際に、SQLSERVER側で勝手に採番を行ってくれるのでキーの重複エラーが発生する心配もなくなります。
Identityの定義
実際にIdentityを設定する場合は下記のようなCreate Table文を定義する。
CREATE TABLE Test
(
ID int IDENTITY (1,1) NOT NULL,
NAME varchar(10)
)
3行目でIdentityを設定していますが、「IDENTITY (1,1)」にどのような意味合いがあるのでしょうか。
見出し(全角15文字)
IDENTITY (開始数, 増加数)
開始数は、データをInsertした際に始めに設定される値で、増加数は、次にInsertされた際に増加される数量です。
IDENTITYの設定が(1, 1)だった場合、初めてデータが作成された場合に設定される値が「1」。次に作成されたら「2」その次は「3」といった具合にはじめに「1」で設定された後は、1ずつ増加された値が設定されます。
IDENTITY(5, 2)で設定されていた場合は、「5」「7」「9」といったような具合で、初期値が「5」で設定された後は2ずつ増加された値が設定されていきます。
Identityの現在値の確認
今設定されているIdentityの値を確認するのにはどうすればよいのでしょうか。
SELECT IDENT_CURRENT('TEST')
Testテーブルに現在設定されているIdentityの値を確認する構文です。
Identityの値更新
それでは、今設定されているIdentityの値を変更するにはどうすればよいのでしょうか。
DBCC CHECKIDENT(TEST, RESEED, 100)
TESTテーブルのIdentityの値を100に変更するという構文です。
例えば以下のようなSQLを続けて実行するとどのようになるでしょうか。
TRUNCATE TABLE Test;
insert into Test values('Data1');
insert into Test values('Data2');
DBCC CHECKIDENT(TEST, RESEED, 100)
insert into Test values('Data3');
insert into Test values('Data4');
select * from Test;
1行目でTableの値を初期した後(ちなみにTruncate Tableを使用するとIdentityが初期化されます)
2件データを追加して、そのあとで、構文を使用してIdentityの値を100に変更します。
そのあとに続けてデータを追加した場合に設定される値はどうなるのか、最後のselect文の結果は以下のようになります。

3件目のデータのIDは「101」に設定され、4件目はそれに1を追加した「102」が設定されています。