SQL:更新一行并返回1个查询的列值

我需要更新表中的一行,并从中获取列值。 我可以这样做

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

这将生成2个计划/访问表。 在T-SQL中可能会修改UPDATE语句以更新并返回名称列只有1个计划/访问?

我正在使用C#,ADO.NET ExecuteScalar()ExecuteReader()方法。

你想要的OUTPUT子句

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

只访问表一次:

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

如果你使用的是SQL Server 2005,那么OUTPUT子句是理想的select

为此使用一个存储过程。

创build一个将@id作为参数的存储过程,并执行这两个操作。 然后您使用DbDataAdapter来调用存储的过程。

我无法pipe理更新并返回select语句中的一行。 即你不能使用其他答案中的选定值。

在我的情况下,我想在查询中使用选定的值。 我提出的解决scheme是:

 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'