zoukankan      html  css  js  c++  java
  • 分頁查詢

    --分页查询数据

    --调用 sp_ShowPageQ 'TFetchData','id',0,'*',200,2,'fetchdt > ''2008-10-22'''

    CREATE    PROCEDURE   sp_ShowPageQ

        @strTable       varchar(50),   --表名

        @strColumn      varchar(50),   --按该列来进行分页

        --@intColType     int,           --@strColumn列的类型,0-数字类型,1-字符类型,2-日期时间类型

        @intOrder       int,           --排序,0-顺序,1-倒序

        @strColumnlist  varchar(800),  --要查询出的字段列表,*表示全部字段

        @intPageSize    int,           --每页记录数

        @intPageNum     int,           --指定页

        @strWhere       varchar(800)   --查询条件

        --@intRecordCount int,           --总记录数

        --@intPageCount   int            --总页数 

     

      AS

     

      DECLARE   @sql    nvarchar(4000) --用于构造SQL语句

      DECLARE   @where1 varchar(800)   --构造条件语句

      DECLARE   @where2 varchar(800)   --构造条件语句

      DECLARE   @intRecordCount int    --总记录数

      DECLARE   @intPageCount int      --总页数

     

      IF   @strWhere   is   null   or   rtrim(@strWhere)=''

      -- 为了避免SQL关键字与字段、表名等连在一起,首先为传入的变量添加空格

     

      BEGIN  --没有查询条件

          SET   @where1=' WHERE '  

          SET   @where2=' '  

      END  

      ELSE   

      BEGIN  --有查询条件 

          SET   @where1=' WHERE  ('+@strWhere+')  AND  '

          SET   @where2=' WHERE  ('+@strWhere+')  '  

      END

     

     

      set @strColumn = ' ' + @strColumn + ' '

      set @strColumnlist = ' ' + @strColumnlist + ' '

     

      --构造SQL语句,计算总页数。计算公式为 总页数 = Ceiling ( 记录个数 / 页大小 )

      SET   @sql='SELECT   @intPageCount=CEILING((COUNT(*)+0.0)/'

            + CAST(@intPageSize   AS   varchar)

            + ')   FROM   ' + @strTable + @where2

     

      --执行SQL语句,计算总页数,并将其放入@intPageCount变量中

      EXEC sp_executesql  @sql,N'@intPageCount int OUTPUT',@intPageCount OUTPUT

     

     

      --计算记录数 @intRecordCount

      SET   @sql='SELECT   @intRecordCount=COUNT(*) FROM   ' + @strTable + @where2

      --执行SQL语句,计算记录数,并将其放入@intRecordCount 变量中

     

      EXEC sp_executesql  @sql,N'@intRecordCount  int OUTPUT',@intRecordCount OUTPUT

     

     

      --将总页数放到查询返回记录集的第一个字段前,此语句可省略

      SET  @strColumnlist= ' '+Cast(@intPageCount as varchar(30)) + ' as PageCount,'+

                            Cast(@intRecordCount as varchar(30)) + ' as RecordCount,' + @strColumnlist  

     

      IF   @intOrder=0   --构造升序的SQL

     

          SET @sql='SELECT TOP '+ CAST(@intPageSize   AS   varchar)  +

                   @strColumnlist +  

                   ' FROM ' + @strTable + @where1 +

                   @strColumn + '>(SELECT MAX('+@strColumn+')  '+  

                   ' FROM (SELECT TOP '+ CAST(@intPageSize*(@intPageNum - 1)  AS  varchar) +  

                   @strColumn + ' FROM '+ @strTable+@where2+'ORDER  BY '+@strColumn+')  t)  ORDER  BY '+ @strColumn  

     

      ELSE              --构造降序的SQL

     

          SET @sql='SELECT TOP '+ CAST(@intPageSize   AS   varchar)  +

                   @strColumnlist+  

                   ' FROM '+ @strTable + @where1 +

                   @strColumn + '<(SELECT   MIN('+@strColumn+')   '+  

                   ' FROM (SELECT TOP '+ CAST(@intPageSize*(@intPageNum - 1)  AS  varchar) +  

                   @strColumn + ' FROM '+ @strTable+@where2+'ORDER   BY '+@strColumn+'   DESC)   t)   ORDER   BY   '+  

                   @strColumn + ' DESC'       

     

     

      IF   @intPageNum=1--第一页

     

          SET   @sql='SELECT   TOP   '+CAST(@intPageSize   AS   varchar) + @strColumnlist + ' FROM '+@strTable+  

                     @where2+'ORDER   BY   '+@strColumn+CASE   @intOrder WHEN  0 THEN  ''  ELSE  '  DESC' 

     

     

      END  

      --PRINT   @sql  

     

      EXEC(@sql)  

     

     

     

     

    GO

     

      CREATE  procedure PaginationQuery        

      @p_selectSQL   nvarchar(4000), --要执行的sql语句  

      @p_curPage   int=1 out,   --要显示的页码  

      @p_pageSize   int=20, --每页的大小  

      @p_totalRecords   int=0   out, --记录数  

      @p_totalPages   int=0   out --总页数  

      as  

      set nocount on  

      declare  

         @p1 int,

         @tmpCur int  

     

      exec sp_cursoropen @p1 output,@p_selectSQL,@scrollopt=1,@ccopt=1,@rowcount=@p_totalPages output  

      if @p_curPage<1

        set @p_curPage=1

      if @p_curPage*@p_pageSize>@p_totalPages

        set @p_curPage=ceiling(1.0*@p_totalPages/@p_pageSize)

      select @tmpCur=@p_curPage

     

      select @p_totalRecords=@p_totalPages+1,@p_totalPages=ceiling(1.0*@p_totalPages/@p_pageSize),@p_curPage=(@p_curPage-1)*@p_pageSize+1      

      exec   sp_cursorfetch   @p1,16,@p_curPage,@p_pageSize    

      select @p_curPage=@tmpCur

      exec   sp_cursorclose   @p1  

      set nocount off

     

    GO

  • 相关阅读:
    shell 统计行数
    sqlldr errors
    sqlldr 远程数据库
    load Properties
    查看shell 版本
    linux中的网络通信指令
    给EditText的drawableRight属性的图片设置点击事件
    p2p网贷3种运营模式
    p2p网贷3种运营模式
    linux常用的压缩与解压缩命令
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940781.html
Copyright © 2011-2022 走看看