在許多資料庫應用系統中,會對資料進行大量的查詢操作。當查詢資料量比較大時查詢所用的時間就會變得較慢,所以我們希望可以分批的擷取資料。
特寫了一個預存程序用於分批擷取資料。鑒於遊標效率低,故此處沒有採用。
Create Procedure SelectPage @TableName nvarchar(64), @KeyField nvarchar(64), @Fields nvarchar(512), @PageIndex int, @PageSize int = 15
As
Declare @sql nvarchar(512)
if @PageIndex = 1 begin
Set @sql = 'Select top ' + convert(nvarchar(8),@PageSize) + ' ' + @Fields + ' From ' + @TableName
end
else begin
Set @sql = 'select top ' + convert(nvarchar(8),@PageSize) + ' ' + @Fields + ' From ' + @TableName
Set @sql = @sql + ' Where ' + @KeyField + ' > (select max(' + @KeyField + ') From (Select Top '
Set @sql = @sql + convert(nvarchar(8), @PageSize * (@PageIndex - 1)) + ' * from '+ @TableName + ' Order by '+ @KeyField +') T)'
end
--Print @sql
exec sp_executesql @sql
參數說明:
@TableName:要查詢的資料表名稱
@KeyField:資料表主鍵欄位
@Fields:要查詢的欄位名列表,使用逗號分隔,最後一個欄位名後不需要逗號
@PageIndex:要查詢的頁面索引
@PageSize:每頁資料筆數,預設為15,即每頁15筆資料