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