是否可以检索受更新查询影响的所有主键?例如:
表:
+-------------+---------+--------+
|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
创建一个事务:
- 将您的记录选择到临时表中
- 更新主表
- 从临时表中选择
使用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