select top 10 * from tb except select top 200 * from tb
select top 210 * from tb except select top 200 * from tb 应该210
SET ROWCOUNT 10select * FROM master..spt_values t WHERE t.number BETWEEN 201 AND 300 AND t.type='p'SET ROWCOUNT 0name number type low high status ----------------------------------- ----------- ---- ----------- ----------- ----------- NULL 201 P 26 2 0 NULL 202 P 26 4 0 NULL 203 P 26 8 0 NULL 204 P 26 16 0 NULL 205 P 26 32 0 NULL 206 P 26 64 0 NULL 207 P 26 128 0 NULL 208 P 27 1 0 NULL 209 P 27 2 0 NULL 210 P 27 4 0(10 行受影响) ROWCOUNT运算比TOP 进化一点点
使 SQL Server 在返回指定的行数之后停止处理查询。 Transact-SQL 语法约定语法
SET ROWCOUNT { number | @number_var } 参数 number | @number_var 在停止特定查询之前要处理的行数(整数)。备注 重要提示: 在 SQL Server 的下一个版本中,使用 SET ROWCOUNT 将不会影响 DELETE、INSERT 和 UPDATE 语句。请不要在新的开发工作中将 SET ROWCOUNT 与 DELETE、INSERT 和 UPDATE 语句一起使用,并应准备修改当前使用它的应用程序。另外,对于当前使用 SET ROWCOUNT 的 DELETE、INSERT 和 UPDATE 语句,建议您使用 TOP 语法重写它们。有关详细信息,请参阅 DELETE (Transact-SQL)、INSERT (Transact-SQL) 或 UPDATE (Transact-SQL)。
对于在远程表和本地及远程分区视图上执行的 INSERT、UPDATE 和 DELETE 语句,将忽略 SET ROWCOUNT 选项设置。要将此选项设置为 off 以便返回所有的行,请将 SET ROWCOUNT 指定为 0。注意: 设置 SET ROWCOUNT 选项将使大多数 Transact-SQL 语句在受到指定数目的行影响后停止处理。这包括触发器和 INSERT、UPDATE 及 DELETE 等数据修改语句。ROWCOUNT 选项对动态游标无效,但它可以限制键集的行集和不区分游标。应谨慎使用该选项,它主要与 SELECT 语句一起使用。
如果行数值较小,则 SET ROWCOUNT 将覆盖 SELECT 语句 TOP 关键字。 当 INSERT、UPDATE 和 DELETE 语句使用显式 TOP 表达式时,这些语句将忽略 SET ROWCOUNT。这包括 INSERT 后跟 SELECT 子句的语句。SET ROWCOUNT 的设置是在执行时或运行时设置,而不是在分析时设置。权限 要求具有 public 角色成员资格。 书中的解释……
except
select top 200 * from tb
except
select top 200 * from tb 应该210
FROM master..spt_values t
WHERE t.number BETWEEN 201 AND 300 AND t.type='p'SET ROWCOUNT 0name number type low high status
----------------------------------- ----------- ---- ----------- ----------- -----------
NULL 201 P 26 2 0
NULL 202 P 26 4 0
NULL 203 P 26 8 0
NULL 204 P 26 16 0
NULL 205 P 26 32 0
NULL 206 P 26 64 0
NULL 207 P 26 128 0
NULL 208 P 27 1 0
NULL 209 P 27 2 0
NULL 210 P 27 4 0(10 行受影响)
ROWCOUNT运算比TOP 进化一点点
SET ROWCOUNT { number | @number_var }
参数
number | @number_var
在停止特定查询之前要处理的行数(整数)。备注
重要提示:
在 SQL Server 的下一个版本中,使用 SET ROWCOUNT 将不会影响 DELETE、INSERT 和 UPDATE 语句。请不要在新的开发工作中将 SET ROWCOUNT 与 DELETE、INSERT 和 UPDATE 语句一起使用,并应准备修改当前使用它的应用程序。另外,对于当前使用 SET ROWCOUNT 的 DELETE、INSERT 和 UPDATE 语句,建议您使用 TOP 语法重写它们。有关详细信息,请参阅 DELETE (Transact-SQL)、INSERT (Transact-SQL) 或 UPDATE (Transact-SQL)。
对于在远程表和本地及远程分区视图上执行的 INSERT、UPDATE 和 DELETE 语句,将忽略 SET ROWCOUNT 选项设置。要将此选项设置为 off 以便返回所有的行,请将 SET ROWCOUNT 指定为 0。注意:
设置 SET ROWCOUNT 选项将使大多数 Transact-SQL 语句在受到指定数目的行影响后停止处理。这包括触发器和 INSERT、UPDATE 及 DELETE 等数据修改语句。ROWCOUNT 选项对动态游标无效,但它可以限制键集的行集和不区分游标。应谨慎使用该选项,它主要与 SELECT 语句一起使用。
如果行数值较小,则 SET ROWCOUNT 将覆盖 SELECT 语句 TOP 关键字。 当 INSERT、UPDATE 和 DELETE 语句使用显式 TOP 表达式时,这些语句将忽略 SET ROWCOUNT。这包括 INSERT 后跟 SELECT 子句的语句。SET ROWCOUNT 的设置是在执行时或运行时设置,而不是在分析时设置。权限
要求具有 public 角色成员资格。
书中的解释……