次のような挿入ステートメントがあるとします。
INSERT INTO MyTable
(
Name,
Address,
PhoneNo
)
VALUES
(
'Yatrix',
'1234 Address Stuff',
'1112223333'
)
OUTPUT句を使用して@var INT
を新しい行のID値(Id
)に設定する方法を教えてください。たとえば、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')
あなたもこれから使用することができます例えば。呼び出し元のアプリに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
)、さらには「実際の」永続テーブルを使用することもできます。