テーブルの行を更新し、そこから列の値を取得する必要があります。私はこれを行うことができます
_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()
メソッドを使用しています。
[〜#〜] output [〜#〜] 句が必要です
UPDATE Items SET Clicks = Clicks + 1
OUTPUT INSERTED.Name
WHERE Id = @Id
テーブルに1回だけアクセスします。
UPDATE Items SET Clicks = Clicks + 1 , @Name = Name WHERE Id = @Id;
select @name;
SQL Server 2005以降を使用している場合、 OUTPUT句 はこれに最適です
これにはストアドプロシージャを使用します。
@idをパラメーターとして受け取り、それらの両方を実行するストアドプロシージャを作成します。次に、 DbDataAdapter を使用して、ストアドプロシージャを呼び出します。
更新して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'