SET ROWCOUNT
使 Microsoft® SQL Server™ 在返回指定的行数之后停止处理查询。 语法
SET ROWCOUNT { number | @number_var } 参数
number | @number_var是在停止给定查询之前要处理的行数(整数)。注释
建议将当前使用 SET ROWCOUNT 的 DELETE、INSERT 和 UPDATE 语句重新编写为使用 TOP 语法。有关更多信息,请参见 DELETE、INSERT 或 UPDATE。对于在远程表和本地及远程分区视图上执行的 INSERT、UPDATE 和 DELETE 语句,忽略 SET ROWCOUNT 选项设置。若要关闭该选项(以便返回所有的行),请将 SET ROWCOUNT 指定为 0。说明  设置 SET ROWCOUNT 选项将使大多数 Transact-SQL 语句在已受指定数目的行影响后停止处理。这包括触发器和 INSERT、UPDATE 及 DELETE 等数据修改语句。ROWCOUNT 选项对动态游标无效,但限制键集的行集和不感知游标。使用该选项时应谨慎,它主要与 SELECT 语句一起使用。
如果行数的值较小,则 SET ROWCOUNT 替代 SELECT 语句 TOP 关键字。SET ROWCOUNT 的设置是在执行或运行时设置,而不是在分析时设置。权限
SET ROWCOUNT 权限默认授予所有用户。示例
SET ROWCOUNT 在指定的行数后停止处理。在下例中,注意有 x 行满足预付款少于或等于 $5,000 的条件;但是,从更新所返回的行数中可以看出并非所有的行都得到处理。ROWCOUNT 影响所有的 Transact-SQL 语句。USE pubs
GO
SELECT count(*) AS Cnt
FROM titles 
WHERE advance >= 5000
GO下面是结果集:Cnt       
----------- 
11          (1 row(s) affected)现在,将 ROWCOUNT 设置为 4,并更新预付款等于或大于 $5,000 的所有行。-- SET ROWCOUNT to 4.
SET ROWCOUNT 4
GO
UPDATE titles
SET advance = 5000
WHERE advance >= 5000

解决方案 »

  1.   

    楼主理解完全正确,我的AspNetPager分页控件用的存储过程就是这样的,分页是通过存储过程实现的,存储过程只获取当前页要显示的数据,而不是获取所有数据。
      

  2.   

    感谢webdiyer(陕北吴旗娃),我就是针对您的控件来提问的。
    但是,按照您的意思,虽然页面只显示少数几条,但事实上,数据库还是提取了全部的记录,每次翻页,数据库都要重新查询,并提取“页码×页容量”条数据。这样数据库岂不很累?谢谢webdiyer(陕北吴旗娃)的控件,我的软件作完后,将再次对您表示感谢!
      

  3.   

    不是获取所有的记录,只有当访问最后一页时才需要获取所有的记录,也就是上面说的页码×页容量”条数据,所以页数越靠后,分页的速度就越慢,这也就是这个存储过程需要完善的地方,据说这个过程分页速度很快,但我还没研究过:http://blog.csdn.net/sun_jianhua/archive/2004/07/04/33574.aspx
      

  4.   

    webdiyer(陕北吴旗娃):您好!
    一直没自习看您的控件存储过程,原来还需要进一步完善啊。
    祝你早日将存储过程改造成功,我前端时间看你给我推荐的文章的作者说,他也是使用了你的控件啊