SQLServerでIDENTITYを使って自動で連番を設定する

プログラミング SQL Server

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

です。

タイトルとURLをコピーしました