IDENTITYは自動で連番を設定し、レコードを管理する場合に重宝するカラムの属性です。
カラムに自動で連番を設定する
自動で連番を設定し、レコードを管理する場合に
重宝するカラムの属性です。
カラムの属性に「IDENTITY」を指定
SQLServerでカラムに自動で連番を設定するには
カラムの属性に「IDENTITY」を指定します。
指定方法は
IDENTITY( 初期値, 増分値 )
です。
実際にはCREATE TABLEでテーブルを作成するタイミングで指定します。
CREATE TABLE test_table ( no INT IDENTITY(1,2) ,name VARCHAR(20) NULL ) INSERT INTO test_table( name ) VALUES( '太郎さん' ) INSERT INTO test_table( name ) VALUES( '次郎さん' ) INSERT INTO test_table( name ) VALUES( '三郎さん' ) SELECT no ,name FROM test_table ORDER BY no DROP TABLE test_table
実行結果は
no | name |
---|---|
1 | 太郎さん |
3 | 次郎さん |
5 | 三郎さん |
です。
ただし「IDENTITY」は「float」、「real」の実数型や
「money」、「smallmoney」では指定することはできません。
「IDENTITY」には値を指定してINSERTできない
「IDENTITY」には値を指定してINSERTすることはできません。
CREATE TABLE test_table ( no INT IDENTITY(1,1) ,name VARCHAR(20) NULL ) INSERT INTO test_table( no, name ) VALUES( 1, '太郎さん' )
の実行結果は
IDENTITY_INSERT が OFF に設定されているときは、テーブル 'test_table' の ID 列に明示的な値を挿入できません。
になります。
指定したい場合は「identity_insert」をONに
指定したい場合は「identity_insert」という値を
ONにすると設定できるようになります。
(実際には自動でないので「IDENTITY」の意味がないですが。)
CREATE TABLE test_table ( no INT IDENTITY(1,2) ,name VARCHAR(20) NULL ) SET identity_insert test_table ON INSERT INTO test_table( no, name ) VALUES( 1, '太郎さん' ) INSERT INTO test_table( no, name ) VALUES( 3, '次郎さん' ) INSERT INTO test_table( no, name ) VALUES( 5, '三郎さん' ) SET identity_insert test_table OFF SELECT no ,name FROM test_table ORDER BY no DROP TABLE test_table
実行結果は
no | name |
---|---|
1 | 太郎さん |
3 | 次郎さん |
5 | 三郎さん |
です。