【发布时间】:2019-11-11 20:31:25
【问题描述】:
我正在通过here 上的教程学习 EF Core,并且在 T-SQL 查询的示例中遇到了以下语句:
1 SET NOCOUNT ON; 含义(来自here):
停止显示受 Transact-SQL 语句或存储过程影响的行数的消息作为结果集的一部分返回。
2 SELECT @@ROWCOUNT; 含义(来自here)
返回受最后一条语句影响的行数。
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
如果可以通过不将 2 添加到查询中来避免 2 的影响,我不明白为什么有人要在 1 的帮助下关闭 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 - 停止显示受 Transact-SQL 语句或存储过程影响的行数作为结果集的一部分返回的消息。 @@ROWCOUNT - 返回受最后一条语句影响的行数。一个不依赖于另一个。 WHEN NOCOUNT IS ON 生成的消息可能会使用@@ROWCOUNT。
标签: sql-server entity-framework tsql entity-framework-core rowcount