zoukankan      html  css  js  c++  java
  • 偶然得到的Sql Server的游标分页查询

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go

    /*
    --利用SQL未公开的存储过程实现分页
    方法简单且效率高,已知的问题就是要多返回一个空的记录集
    解决的方法是在前台调用时,用set recordset=recordset.nextrecordset
    的方法跳过第一个记录集
    此方法由J9988提供,改成了方便调用的存储过程
    --邹建2004.05(引用请保留此信息)--*/


    --缺点是返回2张表,第一张是空表,第二张才有数据

    /*--调用示例
    declare @PageCount int
    exec sp_PageView
    @sql='select * from sysobjects',
    @PageCurrent=2,
    @PageCount=@PageCount out
    SELECT @PageCount
    --*/
    Create PROC [dbo].[sp_PageView]
     @sql         ntext,     --要执行的sql语句
     @PageCurrent int=1,     --要显示的页码
     @PageSize    int=10,    --每页的大小
     @PageCount   int OUTPUT --总页数
    AS
     SET NOCOUNT ON
     DECLARE @p1 int
     --初始化分页游标
     EXEC sp_cursoropen
      @cursor=@p1 OUTPUT,
      @stmt=@sql,
      @scrollopt=1,
      @ccopt=1,
      @rowcount=@PageCount OUTPUT

     --计算总页数
     IF ISNULL(@PageSize,0)<1
     SET @PageSize=10
     SET @PageCount=(@PageCount+@PageSize-1)/@PageSize
     IF ISNULL(@PageCurrent,0)<1 OR ISNULL(@PageCurrent,0)>@PageCount
      SET @PageCurrent=1
     ELSE
      SET @PageCurrent=(@PageCurrent-1)*@PageSize+1

     --显示指定页的数据
     EXEC sp_cursorfetch @p1,16,@PageCurrent,@PageSize
     
     --关闭分页游标
     EXEC sp_cursorclose @p1

  • 相关阅读:
    grafana,graphite,influxdb with docker
    InfluxDB通过HTTP API
    REDIS 六. 修复方案
    linux Service start
    应该掌握的JQuery的7个效果
    webssh: gateone
    Linux下使用timedatectl命令时间时区操作详解
    Linux下使用date命令查看和修改时间
    Linux下使用ntpdate进行时间同步
    nginx内置变量
  • 原文地址:https://www.cnblogs.com/yinhaosln/p/1100717.html
Copyright © 2011-2022 走看看