为什么我们要使用 SET NOCOUNT ON;连同 SELECT @@ROWCOUNT;?
Why do we use the SET NOCOUNT ON; along with the SELECT @@ROWCOUNT;?
我正在通过 here 上的教程学习 EF Core,我遇到了 T-SQL 查询示例中使用的以下语句:
1 SET NOCOUNT ON;
含义(来自here):
Stops the message that shows the count of the number of rows affected by a Transact-SQL statement or stored procedure from being returned as part of the result set.
2 SELECT @@ROWCOUNT;
含义(来自here)
Returns the number of rows affected by the last statement.
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
我不明白为什么有人想要在 1 的帮助下关闭 2 的效果,如果可以通过不将它添加到查询中来避免 2 的效果。 IE。以下查询将与上面的查询完全相同:
exec sp_executesql N'UPDATE [Books] SET [AuthorId] = @p0
WHERE [BookId] = @p1;
',N'@p1 int,@p0 int',@p1=4,@p0=1
我是不是遗漏了什么或者同时使用 SET NOCOUNT ON
和 SELECT @@ROWCOUNT
的目的是什么?
SET NOCOUNT ON
停止在控制台(屏幕)上打印 结果。
@@ROWCOUNT
的使用将行计数捕获为 T-SQL 中的参数,并使其可以用于进一步处理。例如,如果没有行更新,您可以使用条件逻辑来执行某些操作。
SET NOCOUNT
经常用于抑制 DONE_IN_PROC
TDS 协议消息(行数) SQL 服务器将 return 通过底层 TDS 协议流发送给客户端.这些消息在使用某些 SQL 服务器 API 时可能会导致问题,除非应用程序经过专门编码来处理它们(例如通过调用 ADODB.Recordset.NextRecordSet
)以确保执行批处理中的后续语句和结果集 return编辑。因此,使用 SET NOCOUNT ON
已成为 SQL 服务器的常见做法,除非应用程序实际需要行计数。
在您的问题的文档参考中提到的另一个好处是在批处理包含许多 SQL 语句的情况下的性能优势。 SET NOCOUNT
消除了 returning 无论如何都会被丢弃的消息的开销。
我正在通过 here 上的教程学习 EF Core,我遇到了 T-SQL 查询示例中使用的以下语句:
1 SET NOCOUNT ON;
含义(来自here):
Stops the message that shows the count of the number of rows affected by a Transact-SQL statement or stored procedure from being returned as part of the result set.
2 SELECT @@ROWCOUNT;
含义(来自here)
Returns the number of rows affected by the last statement.
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
我不明白为什么有人想要在 1 的帮助下关闭 2 的效果,如果可以通过不将它添加到查询中来避免 2 的效果。 IE。以下查询将与上面的查询完全相同:
exec sp_executesql N'UPDATE [Books] SET [AuthorId] = @p0
WHERE [BookId] = @p1;
',N'@p1 int,@p0 int',@p1=4,@p0=1
我是不是遗漏了什么或者同时使用 SET NOCOUNT ON
和 SELECT @@ROWCOUNT
的目的是什么?
SET NOCOUNT ON
停止在控制台(屏幕)上打印 结果。
@@ROWCOUNT
的使用将行计数捕获为 T-SQL 中的参数,并使其可以用于进一步处理。例如,如果没有行更新,您可以使用条件逻辑来执行某些操作。
SET NOCOUNT
经常用于抑制 DONE_IN_PROC
TDS 协议消息(行数) SQL 服务器将 return 通过底层 TDS 协议流发送给客户端.这些消息在使用某些 SQL 服务器 API 时可能会导致问题,除非应用程序经过专门编码来处理它们(例如通过调用 ADODB.Recordset.NextRecordSet
)以确保执行批处理中的后续语句和结果集 return编辑。因此,使用 SET NOCOUNT ON
已成为 SQL 服务器的常见做法,除非应用程序实际需要行计数。
在您的问题的文档参考中提到的另一个好处是在批处理包含许多 SQL 语句的情况下的性能优势。 SET NOCOUNT
消除了 returning 无论如何都会被丢弃的消息的开销。