首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2000 通用分頁存儲過程完整實現與使用範例

     編輯:關於SqlServer

存儲過程:usp_PagingLarge

此預存程序支援單表/多表、單一/多欄位排序、自訂查詢條件與分組,採用動態 SQL 與 SET ROWCOUNT 實現高效分頁,適應 SQL Server 2000 環境。

參數定義

參數類型說明
@TableNamesVARCHAR(200)資料表名稱,支援多表 JOIN,不可使用別名
@PrimaryKeyVARCHAR(100)主鍵欄位,@Order 為空時必填
@FieldsVARCHAR(200)查詢欄位,空白則為 SELECT *
@PageSizeINT每頁筆數
@CurrentPageINT目前頁碼(0 代表第 1 頁)
@FilterVARCHAR(200)WHERE 條件(不含 WHERE 關鍵字)
@GroupVARCHAR(200)GROUP BY 條件(不含 GROUP BY 關鍵字)
@OrderVARCHAR(200)ORDER BY 條件(不含 ORDER BY 關鍵字),空白預設主鍵升冪

核心邏輯

  1. 解析排序欄位與方向,決定比較運算子(>= 或 <=)。
  2. 查詢排序欄位的資料類型與精度,動態建立變數。
  3. 計算起始列號 @TopRows = @PageSize * @CurrentPage + 1。
  4. 第一次查詢取得第 @TopRows 筆記錄的排序欄位值作為分頁游標(@SortColumnBegin)。
  5. 第二次查詢依游標值篩選下一頁資料,配合 SET ROWCOUNT 限制回傳筆數。

呼叫範例

-- 1. 單表/單排序
EXEC usp_PagingLarge 'bigtable','d_id','d_id,d_title,d_content,d_time',20,1,'','','d_id desc'

-- 2. 單表/多排序
EXEC usp_PagingLarge 'bigtable','d_id','*',20,0,'','','d_time asc,d_id desc'

-- 3. 多表/單排序
EXEC usp_PagingLarge 'bigtable left join bigtable_author on bigtable.d_id=bigtable_author.BigTable_id', 
  'bigtable.d_id', 'bigtable.d_id,bigtable.d_title,bigtable.d_content,bigtable.d_time,bigtable_author.d_author', 
  20, 0, '', '', 'bigtable.d_id asc'

-- 4. 多表/多排序
EXEC usp_PagingLarge 'bigtable left join bigtable_author on bigtable.d_id=bigtable_author.BigTable_id', 
  'bigtable.d_id', 'bigtable.d_id,bigtable.d_title,bigtable.d_content,bigtable.d_time,bigtable_author.d_author', 
  20, 0, '', '', 'bigtable.d_time asc,bigtable.d_id desc'

效能提示

大資料量建議配合覆蓋索引,避免在大型資料表上頻繁掃描。SQL Server 2005+ 環境請改用 ROW_NUMBER() OVER() 視窗函數以獲得更佳效能與可維護性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved