直前のINSERTで自動採番したIDENTITY列の値を取得する

SQLServerのテーブルにIDENTITY属性の列を設定するとデータをINSERTするタイミングで値が自動採番され挿入されます。

その挿入された値を直前に挿入された行をSELECTせずに取得する方法です。

スポンサーリンク

自動採番したIDENTITY列の値を取得する

直前のINSERTで自動採番したIDENTITY列の値を取得するには「@@IDENTITY」を利用します。

まず、テーブルを準備します。

CREATE TABLE test_table(
     NO     INT IDENTITY(1,1) NOT NULL
    ,NAME   VARCHAR(20)
	,AGE    INT
)

準備したテーブルにテスト用のデータを挿入しておきます。

INSERT INTO test_table(NAME,AGE) VALUES ('山田太郎',18)
INSERT INTO test_table(NAME,AGE) VALUES ('里中智',18)
INSERT INTO test_table(NAME,AGE) VALUES ('殿馬一人',18)

現在の状態でSELECTすると

NO  NAME      AGE
1   山田太郎   18
2   里中智     18
3   殿馬一人   18

ですね。

これに1行データを追加してその直前に採番された IDENTITY 列の値を取得して、その値でレコードを更新させます。

--1行データを挿入
INSERT INTO test_table(NAME,AGE) VALUES ('土井垣将',18)

--直前に採番された IDENTITY 列の値を取得する
DECLARE @BEFORE_ID int
SET @BEFORE_ID = @@IDENTITY

--SELECTしてみる
SELECT * FROM test_table

--直前に挿入されたIDENTITYの値をキーに更新する
UPDATE test_table
    SET    NAME = '岩鬼正美'
WHERE
    NO = @BEFORE_ID

--SELECTしてみる
SELECT * FROM test_table

これを実行すると1回目のSELECTは

NO  NAME      AGE
1   山田太郎   18
2   里中智     18
3   殿馬一人   18
4   土井垣将   18

で更新後のSELECTの結果は

NO  NAME      AGE
1   山田太郎   18
2   里中智     18
3   殿馬一人   18
4   岩鬼正美   18

になります。

これで直前に挿入されたIDENTITYの値を取得できたことが確認できました。

まとめ

SQLServerのIDENTITY属性の列をテーブルにデータをINSERTし、その挿入された値を直前に挿入された値を取得するには「@@IDENTITY」を利用すれば取得できます。

以上、直前のINSERTで自動採番したIDENTITY列の値を取得するでした。

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