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

时间:2014-01-15 00:09:38

标签: sql sql-server tsql ssms

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

表:

+-------------+---------+--------+
|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

5 个答案:

答案 0 :(得分:9)

将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 :(得分:1)

创建一个:

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

答案 2 :(得分:0)

使用OUTPUT clause

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

答案 3 :(得分:0)

OUTPUT子句应该做你想要的。

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

答案 4 :(得分:0)

似乎使用OUTPUT是要走的路。 看看这个小提琴我创造了

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