次のような挿入ステートメントがあるとします。
INSERT INTO MyTable
(
Name,
Address,
PhoneNo
)
VALUES
(
'Yatrix',
'1234 Address Stuff',
'1112223333'
)
@var INT
OUTPUT 句を使用して、新しい行の ID 値 ( という) を設定するにはどうすればよいでしょうかId
。たとえば、INSERTED.Name をテーブル変数に入れるサンプルを見たことがありますが、それをテーブル以外の変数に入れることはできません。
OUPUT INSERTED.Id AS @var
、を試しましたSET @var = INSERTED.Id
が、どちらも機能しませんでした。
ベストアンサー1
新しく挿入された ID を次のように SSMS コンソールに出力することもできます。
INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')
呼び出し元のアプリに ID を戻す必要がある場合は、たとえば C# からもこれを使用できます。.ExecuteScalar()
( の代わりに.ExecuteNonQuery()
) を使用して SQL クエリを実行し、結果を読みID
戻すだけです。
または、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
) や「実際の」永続テーブルを「出力ターゲット」として使用することもできます。