通用分頁存儲過程

--saik友情提供 saikoyz@hotmail.com

/*
功能描述:對指定表中滿足條件的記錄按指定列進行分頁查詢
作    者:saiko
版    本:1.10
最后修改:2005-04-13           
調用例子:
 spoSplitPages'任何條件的SQL語句',2,10     -- 第2頁,每頁10行
EXEC spoSplitPages  '你的SQL語句','排序欄位',0 ,30, 1  -- 0: 最後一頁  30:每頁記錄數  1:降冪
*/
CREATE  procedure spoSplitPages
@SqlQuery nvarchar(4000),  --查詢字符串
@OrderFieldName  varchar(30),   --按該列為關鍵字來進行排序分頁
@CurrentPage int,  --第N頁 (如果是 0  則讀取 最后 一頁的記錄  )
@PageSize int,   --每頁行數
@OrderType    int          --排序, 0:順序,  1:  其它數字: 不進行排序 (只有此處的數字不為 0 為 1 的時候,外程序傳入的  OrderFieldName  才可以為空!)

as

DECLARE @sql nvarchar(4000), @tPageCount int

 IF @OrderType=0
   SET @sql= @SqlQuery + '  ORDER BY  '+@OrderFieldName

 IF @OrderType=1
   SET @sql =@SqlQuery + '  ORDER BY  '+@OrderFieldName + '  DESC '
    else
 SET @sql =@SqlQuery
BEGIN
      set nocount on
  declare @P1 int,--P1是游標的id
  @rowcount int
  --print  @sql
  exec sp_cursoropen @P1 output,@sql,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
  SET  @tPageCount = ceiling(1.0*@rowcount/@PageSize)
  if @CurrentPage = 0
   set  @CurrentPage = @tPageCount  -- @PageIndex = 0 表示在調用時,是首次查詢,先讀取 最后 一頁的記錄 
  set @CurrentPage=(@CurrentPage-1)*@PageSize+1
  exec sp_cursorfetch @P1,16,@CurrentPage,@PageSize
  exec sp_cursorclose @P1

  select  @tPageCount as PagesCount ,@rowcount as RowsCount,@CurrentPage as CurrentPage 
     set nocount off
END
GO

阅读更多
文章标签: sql output go
个人分类: SQL Server
想对作者说点什么? 我来说一句

oracle存儲過程性能測試

2010年10月29日 6KB 下载

SqlServer高效万能分页存储过程

2017年07月21日 1011B 下载

最經典的存儲過程sqlserver

2008年05月28日 6KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭