首页 新闻 赞助 找找看

sql server RowCount 的具体使用

0
[已解决问题] 解决于 2012-07-05 14:24

请教各位大虾,RowCount的具体使用方法

静儿~的主页 静儿~ | 菜鸟二级 | 园豆:216
提问于:2012-07-03 14:03
< >
分享
最佳答案
0

指定要操作的记录的数据,以下是SQL帮助里说的:

 

使 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 角色的成员身份。

示例

SET ROWCOUNT 在达到指定的行数后停止处理。请注意,在下面的示例中共有 545 行满足 Quantity 小于 300 的条件。但是,从更新后返回的行数可以看出并非所有行都得到了处理。ROWCOUNT 影响所有的 Transact-SQL 语句。

 复制代码
USE AdventureWorks2008R2;
GO
SELECT count(*) AS Count
FROM Production.ProductInventory
WHERE Quantity < 300;
GO

下面是结果集:

Count

-----------

537

(1 row(s) affected)

现在,将 ROWCOUNT 设置为 4,并以 Quantity 小于 300 的条件更新所有行。

 复制代码
SET ROWCOUNT 4;
UPDATE Production.ProductInventory
SET Quantity = 400
WHERE Quantity < 300;
GO

(4 row(s) affected)

 

 

我们使用SELECT的时候,可以通过指定TOP来设定查询结果的记录数,但是,在使用UPDATE、DELETE、INSERT的时候,却不能使用TOP来实现这个限制,ROWCOUNT则能达到这个目的。不过
MS说在新版本中将不对UPDATE、DELETE、INSERT影响。

奖励园豆:5
无之无 | 大侠五级 |园豆:5095 | 2012-07-03 14:11

特别的,使用ROWCOUNT,可以变成变量的形式写指定SELECT的数量

 

我们知道,在SELECT TOP 语句中,TOP后的数量是必须是常量的,而不能是变量,如果是变量,该怎么办?我们通常是把SQL语句生成为字符串然后使用EXCUTE执行字符串来达到目的。

 

而使用这个ROWCOUNT则改变了:

 

declare @rowcount int;

set @rowcount = 20;

set rowcount @rowcount

select * from table

 

set @rowcount = 10

set rowcount @rowcount

select * from table

无之无 | 园豆:5095 (大侠五级) | 2012-07-03 14:16

@笨笨蜗牛: 图片不能显示

artwl | 园豆:16736 (专家六级) | 2012-07-03 15:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册