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列の値を取得するでした。
