通用分頁(yè)存儲(chǔ)過(guò)程(原創(chuàng))
這是我項(xiàng)目中使用的一個(gè)分頁(yè)存儲(chǔ)過(guò)程,具有很強(qiáng)的通用性。配合前臺(tái)ASP.NET使用50萬(wàn)條數(shù)據(jù)基本感不到延遲。數(shù)據(jù)庫(kù)為SQLServer2000。1.分頁(yè)存儲(chǔ)過(guò)程
CREATE procedure pagination
@str_sql varchar(1000) = '*', -- 執(zhí)行的SQL 不含Order by 內(nèi)容
@str_orderfield varchar(255)='''', -- 排序的字段名
@page_size int = 10, -- 頁(yè)大小
@page_index int = 0, -- 頁(yè)碼
@order_type int, -- 設(shè)置排序類型, 非 -1 值則降序
@total_count int output -- 返回記錄總數(shù), 非 0 值則返回
as
---------------------
-- 獲取指定頁(yè)的數(shù)據(jù)--
---------------------
declare @strsql varchar(5000) -- 主語(yǔ)句
declare @strtmp varchar(5000) -- 臨時(shí)變量
declare @strorder varchar(400) -- 排序字串
declare @cruRow int -- 當(dāng)前行號(hào)
--執(zhí)行總數(shù)統(tǒng)計(jì)
exec getRowCount @str_sql,@total_count output
set @strtmp = ' select * from ' +
' (select top ' + convert(varchar(10),@page_size) + ' * from ' +
' (select top ' + convert(varchar(10),(@page_index + 1) * @page_size) +' * from '+ -- N+1頁(yè)
' ('+ @str_sql +') Src '
--排序方向
if @order_type !=0
begin
set @strsql= @strtmp +
' order by @str_orderfield asc) a ' +
' order by @str_orderfield desc)b' +
' order by @str_orderfield asc'
end
else
begin
set @strsql= @strtmp +
' order by @str_orderfield desc) a ' +
' order by @str_orderfieldasc)b' +
' order by @str_orderfield desc'
end
exec (@strsql)
GO
----------------------------------------------------------------------------
2.分頁(yè)存儲(chǔ)過(guò)程執(zhí)行中用到的行數(shù)統(tǒng)計(jì)
create procedure getRowCount
@sql nvarchar(2000),
@count int output
as
begin
--------------------
-- 獲取數(shù)據(jù)總行數(shù) --
--------------------
declare @tmpsql nvarchar(2000)
set @tmpsql='select @count=count(*) from ('+ @sql +') a'
execute sp_executesql @tmpsql,N'@count int output',@count output
end
GO
posted on 2008-01-10 17:08 靈! 閱讀(520) 評(píng)論(0) 編輯 收藏 所屬分類: Java專題-分頁(yè)技術(shù)