sql如何同时选择和更新

时间:2015-09-21 20:33:21

标签: .net sql-server database sql-server-2008

我有一个列processed的表,失败的值为0,成功的值为1。我想添加第三个临时案例,其值为2.

我之前的疑问是:

string query = "SELECT * FROM dbo.tableName WHERE processed = @processed";

我想对这个选择的行进行更新。我当然可以从.net那样做,但我想知道是否有一个查询可以选择行并同时更新进程列。

我正在使用sql server 2008

这个问题陈述了一个非常古老的解决方案,即输出,我无法发现它。

2 个答案:

答案 0 :(得分:3)

您可以使用OUTPUT clause

UPDATE dbo.tableName 
SET processed = 2 --or whatever you want..
OUTPUT inserted.*
WHERE processed = @processed

来自MSDN(上面的链接):

  

从受影响的每一行返回信息或基于表达式的表达式   通过INSERT,UPDATE,DELETE或MERGE语句。这些结果可以   返回处理应用程序

答案 1 :(得分:0)

我假设您想要对所选行执行某种原子记录锁定。不确定T-SQL,但在Oracle中,您可以使用UPDATE表执行此操作SET PROCESSED = 2 WHERE条件RETURNING primary_key BULK COLLECT INTO数组。然后对其键存储在数组中的行执行select *。

我认为T-SQL语法类似于UPDATE表SET PROCESSED = 2 OUTPUT primary_key INTO temp_table WHERE条件。