我有一个列processed
的表,失败的值为0,成功的值为1。我想添加第三个临时案例,其值为2.
我之前的疑问是:
string query = "SELECT * FROM dbo.tableName WHERE processed = @processed";
我想对这个选择的行进行更新。我当然可以从.net那样做,但我想知道是否有一个查询可以选择行并同时更新进程列。
我正在使用sql server 2008
这个问题陈述了一个非常古老的解决方案,即输出,我无法发现它。
答案 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条件。