提问人:Niek Jonkman 提问时间:11/17/2023 更新时间:11/17/2023 访问量:79
在SQL中,如何查看哪些行受IN子句的影响?[复制]
In SQL, how to check which rows are affected by the IN clause? [duplicate]
问:
对于这个问题,我将使用这个虚构的数据:
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)
答:
-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');
下一个:基于访问令牌的服务器客户端通信
评论
1 行受到影响
”我希望它会返回说“无效的列名'彼得'。列名“Jennifer”无效。
OUTPUT
quoted_identifier