set Rowcount

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   

Set Rowcount 分页

   SQL Server中有一个Set Rowcount的的设置,它的意思是使命令的处理在响应指定的行数之后停止处理命令,利用这个特点,我们可以借用它来在一个千万行级数据表中实现高性能分页查询。先来说说实现方式:
       1、我们来假定Table中有一个已经建立了索引的主键字段ID(整数型),我们将按照这个字段来取数据进行分页。
       2、页的大小我们放在@PageSize中
       3、当前页号我们放在@CurrentPage中
       4、如何让记录指针快速滚动到我们要取的数据开头的那一行呢,这是关键所在!有了Set RowCount,我们就很容易实现了。
       5、如果我们成功地滚动记录指针到我们要取的数据的开头的那一行,然后我们把那一行的记录的ID字段的值记录下来,那么,利用Top和条件,我们就很容易的得到指定页的数据了。当然,有了Set RowCount,我们难道还用Top么?
       看看Set Rowcount怎么来帮我们的忙吧:

Declare @ID int
Declare @MoveRecords int
Declare @CurrentPage int
Declare @PageSize int
set @PageSize=5
set @CurrentPage=1

--@CurrentPage和@PageSize是传入参数
Set @MoveRecords=@CurrentPage * @PageSize+1

--下面两行实现快速滚动到我们要取的数据的行,并把ID记录下来
Set Rowcount @MoveRecords
Select @ID=userid from usersinfo Order by userid

Set Rowcount @PageSize
--最恨为了减少麻烦使用*了,但是在这里为了说明方便,暂时用一下
Select * From usersinfo Where userid>=@ID Order By userid

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值