web-dev-qa-db-ja.com

INSERT文のOUTPUT句を使用してID値を取得する方法

次のような挿入ステートメントがあるとします。

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

OUTPUT句を使用して@var INTを新しい行のID値(Id)に設定する方法を教えてください。たとえば、INSERTED.Nameをテーブル変数に入れる例を見ましたが、テーブル以外の変数に入れることはできません。

私はOUPUT INSERTED.Id AS @varSET @var = INSERTED.Idを試しましたが、どちらもうまくいきませんでした。

216
Yatrix

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

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

あなたもこれから使用することができます例えば。呼び出し元のアプリにIDを戻す必要がある場合は、C#を使用します。結果として得られるIDを読み取るには、(.ExecuteScalar()ではなく).ExecuteNonQuery()を付けてSQLクエリを実行します。

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

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)、さらには「実際の」永続テーブルを使用することもできます。

417
marc_s