web-dev-qa-db-ja.com

SQL:行を更新し、1つのクエリで列の値を返す

テーブルの行を更新し、そこから列の値を取得する必要があります。私はこれを行うことができます

_UPDATE Items SET Clicks = Clicks + 1 WHERE Id = @Id;
SELECT Name FROM Items WHERE Id = @Id
_

これにより、テーブルへの2つのプラン/アクセスが生成されます。 T-SQLでUPDATEステートメントを変更して、1つのプラン/アクセスのみでName列を更新して返すことは可能ですか?

C#、ADO.NET ExecuteScalar()またはExecuteReader()メソッドを使用しています。

50
Robert

[〜#〜] output [〜#〜] 句が必要です

UPDATE Items SET Clicks = Clicks + 1
OUTPUT INSERTED.Name
WHERE Id = @Id
92
Marc Gravell

テーブルに1回だけアクセスします。

UPDATE Items SET Clicks = Clicks + 1 , @Name = Name WHERE Id = @Id;
select @name;
18
Learning

SQL Server 2005以降を使用している場合、 OUTPUT句 はこれに最適です

3
Russ Cam

これにはストアドプロシージャを使用します。

0
Rashack

@idをパラメーターとして受け取り、それらの両方を実行するストアドプロシージャを作成します。次に、 DbDataAdapter を使用して、ストアドプロシージャを呼び出します。

0
BFree

更新して1行返すことができませんでしたselectステートメント内。つまり、他の回答から選択した値を使用することはできません。

私の場合、クエリで選択した値を使用したかった。私が思いついた解決策は:

declare @NextId int
set @NextId = (select Setting from Settings where key = 'NextId')

select @NextId + ROW_NUMBER() over (order by SomeColumnOfYourTable) from YourTable

update Settings set Setting = Setting + @@ROWCOUNT 
where key = 'NextId'
0
Kobbe