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'