在SQL中,如何查看哪些行受IN子句的影响?[复制]

In SQL, how to check which rows are affected by the IN clause? [duplicate]

提问人:Niek Jonkman 提问时间:11/17/2023 更新时间:11/17/2023 访问量:79

问:

对于这个问题,我将使用这个虚构的数据:

Table Name: Person

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

当我运行此查询时:

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

SQL会回复我说:

1 row affected

它会将 Jennifer 的年龄更改为 50 岁,并且不会对 Peter 做任何事情,因为他不存在在 Person 表中。

我的问题是:

在这种特定情况下,SQL是否有可能不仅告诉我有1行受到影响,而且会告诉我哪一行受到影响?SQL有没有可能告诉我我们刚刚改变了Jennifer?

我试图找到解决这个问题的方法,但主要找到的是关于受影响的行数而不是实际数据的主题。我正在运行 SQL Server Management Studio 和 SQL 版本 15.x)

sql-server

评论

2赞 Thom A 11/17/2023
“SQL 会回复我说:1 行受到影响我希望它会返回说“无效的列名'彼得'。列名“Jennifer”无效。
2赞 Thom A 11/17/2023
至于这个问题,你有没有考虑过这个条款?OUTPUT
2赞 jarlh 11/17/2023
永远不要存储年龄,Jennifer 明年就要 51 岁了,你的表数据就过时了。改为存储 DOB。
0赞 Jonas Metzler 11/17/2023
阅读文档:learn.microsoft.com/en-us/sql/t-sql/queries/... 和 learn.microsoft.com/en-us/sql/t-sql/queries/...
1赞 Stu 11/17/2023
@ThomA如果 OP 碰巧关闭,那也没关系quoted_identifier

答:

-1赞 Vkx 11/17/2023 #1

某些数据库系统提供扩展或附加功能,允许您获取有关受影响行的更多详细信息。例如:在 SQL Server 中,可以使用 OUTPUT 子句返回受 UPDATE 语句影响的行的列。例:

DECLARE @UpdatedRows TABLE (PersonID INT, PersonName VARCHAR(255), PersonAge INT);

UPDATE Person
SET PersonAge = 50
OUTPUT INSERTED.PersonID, INSERTED.PersonName, INSERTED.PersonAge INTO @UpdatedRows
WHERE PersonName IN ('Jennifer', 'Peter');

SELECT * FROM @UpdatedRows; 
0赞 Marco Parola 11/17/2023 #2

尝试 OUTPUT 语句:

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