INSERT ステートメントの OUTPUT 句を使用して ID 値を取得するにはどうすればよいですか? 質問する

INSERT ステートメントの OUTPUT 句を使用して ID 値を取得するにはどうすればよいですか? 質問する

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

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

@var INTOUTPUT 句を使用して、新しい行の 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) や「実際の」永続テーブルを「出力ターゲット」として使用することもできます。

おすすめ記事