SET ROWCOUNT,SET NOCOUNT

时间:2022-04-21 21:35:10

SET ROWCOUNT (Transact-SQL)

在停止特定查询之前要处理的行数(整数)。

SET ROWCOUNT,SET NOCOUNT重要提示

在 SQL Server 的将来版本中,使用 SET ROWCOUNT 将不会影响 DELETE、INSERT 和 UPDATE 语句。 应避免在新的开发工作中将 SET ROWCOUNT 与 DELETE、INSERT 和 UPDATE 语句一起使用,并计划修改当前使用它的应用程序。 对于类似行为,请使用 TOP 语法。 有关详细信息,请参阅 TOP (Transact-SQL)

要将此选项设置为 off 以便返回所有的行,请将 SET ROWCOUNT 指定为 0。

设置 SET ROWCOUNT 选项将使大多数 Transact-SQL 语句在受到指定数目的行影响后停止处理。 其中包括触发器。 ROWCOUNT 选项对动态游标无效,但它可以限制键集的行集和不敏感游标; 所以应慎用此选项。

如果行数值较小,则 SET ROWCOUNT 将覆盖 SELECT 语句 TOP 关键字。

SET ROWCOUNT 的设置是在执行时或运行时设置,而不是在分析时设置。

示例

SET ROWCOUNT 在达到指定的行数后停止处理。 请注意,在下面的示例中有超过 500 行满足 Quantity 小于 300 的条件。 但是,应用 SET ROWCOUNT 后,您可以看到并未返回所有行。

USE AdventureWorks2012;
GO
SELECT count(*) AS Count
FROM Production.ProductInventory
WHERE Quantity < 300;
GO

下面是结果集:

Count

-----------

537

(1 row(s) affected)

现在,将 ROWCOUNT 设置为 4 并返回所有行,以演示仅返回 4 行。

SET ROWCOUNT 4;
SELECT *
FROM Production.ProductInventory
WHERE Quantity < 300;
GO

(4 row(s) affected)

 

 

 

 

 

在存储过程中,经常用到SET NOCOUNT ON;

作用:阻止在结果集中返回显示受T-SQL语句或则usp影响的行计数信息。

当SET ONCOUNT ON时候,不返回计数,当SET NOCOUNT OFF时候,返回计数;

即使当SET NOCOUNT ON 时候,也更新@@RowCount;

当SET NOCOUNT on时候,将不向客户端发送存储过程每个语句的DONE_IN_proc消息,如果存储过程中包含一些并不返回实际数据的语句,网络通信流量便会大量减少,可以显著提高应用程序性能;

SET NOCOUNT 指定的设置时在执行或运行时候生效,分析时候不生效。

SET ROWCOUNT,SET NOCOUNT

1 USE Northwind
2 GO
3 SET NOCOUNT OFF;
4 SELECT TOP 5 OrderDate FROM Orders
5 GO

结果集显示:

SET ROWCOUNT,SET NOCOUNT

SET ROWCOUNT,SET NOCOUNT

1 SET NOCOUNT ON;
2 SELECT TOP 5 OrderDate FROM Orders
3 GO

SET ROWCOUNT,SET NOCOUNT