为什么我们使用 SET NOCOUNT ON; 连同 SELECT @@ROWCOUNT;?

qqq*_*qqq 1 t-sql sql-server entity-framework rowcount entity-framework-core

我正在通过此处的教程学习 EF Core 并且遇到了 T-SQL 查询示例中使用的以下语句:

1SET NOCOUNT ON;含义(来自此处):

停止显示受 Transact-SQL 语句或存储过程影响的行数计数的消息作为结果集的一部分返回。

2SELECT @@ROWCOUNT;含义(从这里

返回受最后一条语句影响的行数。

1和2同时使用。这对我来说很困惑。例如,这里:

exec sp_executesql N'SET NOCOUNT ON;
UPDATE [Books] SET [AuthorId] = @p0
WHERE [BookId] = @p1;
SELECT @@ROWCOUNT;
',N'@p1 int,@p0 int',@p1=4,@p0=1
Run Code Online (Sandbox Code Playgroud)

我不明白为什么有人想要在 1 的帮助下关闭 2 的效果,如果可以通过不将其添加到查询中来避免 2 的影响。即以下查询将与上述查询完全相同:

exec sp_executesql N'UPDATE [Books] SET [AuthorId] = @p0
WHERE [BookId] = @p1;
',N'@p1 int,@p0 int',@p1=4,@p0=1
Run Code Online (Sandbox Code Playgroud)

我在这里遗漏了什么或者同时使用 theSET NOCOUNT ON和 the的目的是什么SELECT @@ROWCOUNT

Gor*_*off 6

SET NOCOUNT ON停止在控制台(屏幕)上打印结果。

使用@@ROWCOUNT捕获行计数作为 T-SQL 中的参数,并使其可以用于进一步处理。例如,如果没有行更新,您可以使用条件逻辑来执行某些操作。