sql

sql Identityの使い方 SQL SERVER

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」が設定されています。

-sql
-