You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在SQL Server中如何查看IN子句影响的具体行?

SQL Server中UPDATE后显示具体受影响行的方法

问题场景

虚构数据表Person的结构及数据如下:

表名: Person

PersonID(PK),PersonName,PersonAge
1,Jack,0
2,Joe,0
3,Jennifer,0
4,Jacky,0
5,John,0

执行以下UPDATE语句:

UPDATE Person
SET PersonAge = 50
WHERE PersonName IN ('Jennifer', 'Peter')

默认仅返回:

1 row affected

实际只有Jennifer的年龄被修改为50,Peter因不存在未执行操作。需求是让SQL在返回受影响行数的同时,显示具体被修改的行信息,使用环境为SQL Server Management Studio 15.x版本。

解决方案

在SQL Server中,可通过OUTPUT子句实现该需求,它能直接返回UPDATE操作中被修改行的详细数据。

方法1:返回受影响行的关键信息

修改原UPDATE语句,添加OUTPUT子句指定需要返回的字段:

UPDATE Person
SET PersonAge = 50
OUTPUT inserted.PersonID, inserted.PersonName, inserted.PersonAge
WHERE PersonName IN ('Jennifer', 'Peter')

执行后,除了1 row affected的提示,还会输出一个结果集,展示被修改行的具体信息:

PersonIDPersonNamePersonAge
3Jennifer50

方法2:对比修改前后的数据

如果需要查看字段修改前后的变化,可以同时引用inserted(更新后的数据)和deleted(更新前的数据)两个内置逻辑表:

UPDATE Person
SET PersonAge = 50
OUTPUT deleted.PersonID, deleted.PersonName, deleted.PersonAge AS 原年龄,
       inserted.PersonAge AS 新年龄
WHERE PersonName IN ('Jennifer', 'Peter')

执行后返回的结果集将包含修改前后的年龄对比:

PersonIDPersonName原年龄新年龄
3Jennifer050

注意事项

  • inserted存储UPDATE操作后的数据行,deleted存储UPDATE操作前的数据行,这两个是SQL Server专属的内置逻辑表
  • 该方案完全适配SQL Server Management Studio 15.x版本

内容的提问来源于stack exchange,提问作者Niek Jonkman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 03:11:01