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 | 三郎さん |
です。
