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

Ada*_*ate 4 sql t-sql sql-server ssms

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

表:

+-------------+---------+--------+
|idx (PK, int)|FirstName|LastName|
+-------------+---------+--------+
|1            |Jane     |Smith   |
+-------------+---------+--------+
|2            |John     |Test    |
+-------------+---------+--------+
|3            |Adam     |Smith   |
+-------------+---------+--------+
Run Code Online (Sandbox Code Playgroud)

查询:

UPDATE clients SET [LastName] = 'Smith' WHERE [FirstName] = 'John'
Run Code Online (Sandbox Code Playgroud)

我想要的回报:

2

但我也希望这种方法适用于多行...例如:

查询:

UPDATE clients SET [FirstName] = 'test' WHERE [LastName] = 'Smith'
Run Code Online (Sandbox Code Playgroud)

我想要的回报:

1,3

Joe*_*art 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
Run Code Online (Sandbox Code Playgroud)


Dan*_*cuk 1

创建一个交易:

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