返回所有受更新查询影响的主键



是否可以检索受更新查询影响的所有主键?例如:

表:

+-------------+---------+--------+
|idx (PK, int)|FirstName|LastName|
+-------------+---------+--------+
|1            |Jane     |Smith   |
+-------------+---------+--------+
|2            |John     |Test    |
+-------------+---------+--------+
|3            |Adam     |Smith   |
+-------------+---------+--------+

查询:

UPDATE clients SET [LastName] = 'Smith' WHERE [FirstName] = 'John'

我想要退货:

2

但我也希望此方法适用于多行。。。例如:

查询:

UPDATE clients SET [FirstName] = 'test' WHERE [LastName] = 'Smith'

我想要退货:

1,3

将OUTPUT子句与表变量结合使用以更新所有ID:

declare @insertedIds table (id int)
update
supportContacts
set
type = 'Email, updated'
output inserted.id into @insertedIds
where
type = 'Email'
select id from @insertedIds

创建一个事务:

  1. 将您的记录选择到临时表中
  2. 更新主表
  3. 从临时表中选择

使用OUTPUT子句

UPDATE clients SET [FirstName] = 'test' OUTPUT inserted.idx WHERE [LastName] = 'Smith'

OUTPUT子句应该执行您想要的操作。

UPDATE clients SET [LastName] = 'Smith' OUTPUT inserted.idx WHERE [FirstName] = 'John' ;

似乎使用OUTPUT是最好的方法。看看这个小提琴我创建

http://sqlfiddle.com/#!3/2caa1/10

最新更新