返回更新记录的SQL Server存储过程

4

我想创建一个存储过程,返回所有已更新的记录。

我的更新查询语句如下:

UPDATE BatchItems 
SET [Status] = 'Processing' 
WHERE [Status] = 'Queued'

我不确定如何返回这些特定的记录。


你能在执行更新之前选择记录吗?实际上,这可以让你获得更新之前相同的记录。比如说,先执行“Select * from BatchItems where Status 'Queued'”,然后再运行你的更新操作,这样可以得到相同的结果。 - Ta01
我不想这样做,因为在选择和更新之间可能已经插入了记录。 - Great Gonzo
好的,抱歉我不知道可能存在并发问题。 - Ta01
2个回答

4
你可以使用OUTPUT INSERTED.[cols]来获取语句已修改的行。
UPDATE BatchItems 
   SET [Status] = 'Processing' 
   OUTPUT INSERTED.*
WHERE [Status] = 'Queued'

例子;

select 'Queued       ' as status, 1 as id into #BatchItems
insert  #BatchItems values ('Queued', 2)
insert  #BatchItems values ('XXX', 3)

UPDATE #BatchItems 
  SET [Status] = 'Processing' 
  OUTPUT INSERTED.*
WHERE [Status] = 'Queued'

>>status       id
>>Processing   2
>>Processing   1

@marc_s,对于INSERT/UPDATE/DELETE它完美地工作了,参见更新。 - Alex K.

4

输出子句仅在SQL 2k5或更高版本中受支持。 - Dave Carlile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接