1. ホーム
  2. sql-server

UPDATE OUTPUTを変数にする

2023-07-25 19:08:28

質問

私は更新と選択を実行しようとしています。基本的に、インデックスに基づいて更新し、更新された行のIDを選択します。

これはOUTPUT句を使用した簡単なものです。

UPDATE Foo
SET Bar = 1
OUTPUT INSERTED.Id
WHERE Baz = 2

しかし、さて、これをどうやって変数に取り込めばいいのでしょうか?

DECLARE @id INT

この3つはうまくいきません。

UPDATE Foo
SET Bar = 1
OUTPUT @id = INSERTED.Id
WHERE Baz = 2

SET @id =
(UPDATE Foo
 SET Bar = 1
 OUTPUT INSERTED.Id
 WHERE Baz = 2)

SET @id =
(SELECT Id FROM (UPDATE Foo
                 SET Bar = 1
                 OUTPUT INSERTED.Id Id
                 WHERE Baz = 2) z)

最後のものは、Management Studio ですべての赤い四角いものが消えたときに、一時的に興奮したからです。残念ながら、私はこのエラーを受け取ります。

A nested INSERT, UPDATE, DELETE, or MERGE statement is not allowed in a SELECT statement that is not the immediate source of rows for an INSERT statement.

どのように解決するのですか?

1行のみの影響であれば、テーブル変数を使用せずに行えます。

DECLARE @id INT

UPDATE Foo 
SET Bar = 1, @id = id 
WHERE Baz = 2

SELECT @id