此預存程序支援單表/多表、單一/多欄位排序、自訂查詢條件與分組,採用動態 SQL 與 SET ROWCOUNT 實現高效分頁,適應 SQL Server 2000 環境。
| 參數 | 類型 | 說明 |
|---|---|---|
| @TableNames | VARCHAR(200) | 資料表名稱,支援多表 JOIN,不可使用別名 |
| @PrimaryKey | VARCHAR(100) | 主鍵欄位,@Order 為空時必填 |
| @Fields | VARCHAR(200) | 查詢欄位,空白則為 SELECT * |
| @PageSize | INT | 每頁筆數 |
| @CurrentPage | INT | 目前頁碼(0 代表第 1 頁) |
| @Filter | VARCHAR(200) | WHERE 條件(不含 WHERE 關鍵字) |
| @Group | VARCHAR(200) | GROUP BY 條件(不含 GROUP BY 關鍵字) |
| @Order | VARCHAR(200) | ORDER BY 條件(不含 ORDER BY 關鍵字),空白預設主鍵升冪 |
@TopRows = @PageSize * @CurrentPage + 1。@SortColumnBegin)。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() 視窗函數以獲得更佳效能與可維護性。