日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

分頁查詢

 aaie_ 2013-04-29

--分頁查詢數(shù)據(jù)

--調(diào)用 sp_ShowPageQ 'TFetchData','id',0,'*',200,2,'fetchdt > ''2008-10-22'''

CREATE    PROCEDURE   sp_ShowPageQ

    @strTable       varchar(50),   --表名

    @strColumn      varchar(50),   --按該列來進(jìn)行分頁

    --@intColType     int,           --@strColumn列的類型,0-數(shù)字類型,1-字符類型,2-日期時間類型

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

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

    @intPageSize    int,           --每頁記錄數(shù)

    @intPageNum     int,           --指定頁

    @strWhere       varchar(800)   --查詢條件

    --@intRecordCount int,           --總記錄數(shù)

    --@intPageCount   int            --總頁數(shù) 

 

  AS

 

  DECLARE   @sql    nvarchar(4000) --用于構(gòu)造SQL語句

  DECLARE   @where1 varchar(800)   --構(gòu)造條件語句

  DECLARE   @where2 varchar(800)   --構(gòu)造條件語句

  DECLARE   @intRecordCount int    --總記錄數(shù)

  DECLARE   @intPageCount int      --總頁數(shù)

 

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

  -- 為了避免SQL關(guān)鍵字與字段、表名等連在一起,首先為傳入的變量添加空格

 

  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 + ' '

 

  --構(gòu)造SQL語句,計算總頁數(shù)。計算公式為 總頁數(shù) = Ceiling ( 記錄個數(shù) / 頁大小 )

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

        + CAST(@intPageSize   AS   varchar)

        + ')   FROM   ' + @strTable + @where2

 

  --執(zhí)行SQL語句,計算總頁數(shù),并將其放入@intPageCount變量中

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

 

 

  --計算記錄數(shù) @intRecordCount

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

  --執(zhí)行SQL語句,計算記錄數(shù),并將其放入@intRecordCount 變量中

 

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

 

 

  --將總頁數(shù)放到查詢返回記錄集的第一個字段前,此語句可省略

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

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

 

  IF   @intOrder=0   --構(gòu)造升序的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              --構(gòu)造降序的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), --要執(zhí)行的sql語句  

  @p_curPage   int=1 out,   --要顯示的頁碼  

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

  @p_totalRecords   int=0   out, --記錄數(shù)  

  @p_totalPages   int=0   out --總頁數(shù)  

  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

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多