265

次のような挿入ステートメントがある場合:

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どちらもうまくいきませんでした。

4

1 に答える 1

534

次のように、新しく挿入された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)または「実際の」永続テーブルを「出力ターゲット」として使用することもできます。

于 2012-06-12T15:07:29.303 に答える