偶然得到的Sql Server的遊標分頁查詢

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.