1. ホーム
  2. sql

[解決済み】INSERT文のOUTPUT句を使用してID値を取得するにはどうすればよいですか?

2022-04-06 06:21:15

質問

次のようなinsert文があった場合。

INSERT INTO MyTable
(  
  Name,
  Address,
  PhoneNo
)
VALUES
(
  'Yatrix',
   '1234 Address Stuff',
   '1112223333'
)

を設定するにはどうすればよいのでしょうか? @var INT を新しい行の ID 値に設定します (これは Id ) を OUTPUT 句で使用することはできますか?例えばINSERTED.Nameをテーブル変数に入れるサンプルは見たことがあるのですが、テーブル以外の変数に入れることができないのです。

試してみたところ OUPUT INSERTED.Id AS @var , SET @var = INSERTED.Id が、どちらもうまくいきませんでした。

解決方法は?

このように、新しく挿入されたIDをSSMSコンソールに出力させることもできます。

INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')

C# などから、呼び出し側のアプリに ID を返す必要がある場合にも、この方法を使用できます。 .ExecuteScalar() (代わりに .ExecuteNonQuery() を読み込むために、結果の ID を返します。

また、新しく挿入された ID T-SQL内部で(例えば、後でさらに処理するために)、テーブル変数を作成する必要があります。

DECLARE @OutputTbl TABLE (ID INT)

INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID INTO @OutputTbl(ID)
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')

この方法では、複数の値を @OutputTbl で、それに対してさらに処理を行う。また、通常のテンポラリテーブル( #temp ) あるいは、quot;real" 永続的なテーブルを、ここでquot;出力ターゲット" として使用することもできます。