參數注釋得比較清晰,就不另外說明了。
create proc spPagination
(
@TName nvarchar(100), --表名
@FName nvarchar(255), --字段名
@OName nvarchar(255), --排序字段名
@ODirect bit=1, --排序方向,Desc
@PSize int=10, --頁大小
@PIndex int=1, --頁數
@sWhere nvarchar(1000)='''', --查詢條件
@iCount int=0 output --記錄數
)
/**//***********************
* name: spPagination
* author: zzcv
* version: 1.1
* date: 2007-6-9
************************/
as
set nocount on
declare @sSQL nvarchar(1000) --臨時變量
set @sSQL=''select @iCount=count(*) from ''+@TName
if @sWhere!=''''
set @sSQL=@sSQL+'' where ''+@sWhere
exec sp_executesql @sSQL,N''@iCount int out'',@iCount out
set @sSQL=''select top ''+str(@PSize)+'' ''+@FName+'' from ''+@TName+'' where ''+@OName
if @ODirect=0
set @sSQL=@sSQL+''>=(select max''
else
set @sSQL=@sSQL+''<=(select min''
set @sSQL=@sSQL+''(''+@OName+'') from (select top ''+str((@PIndex-1)*@PSize+1)+'' ''+@OName+'' from ''+@TName
if @sWhere!=''''
set @sSQL=@sSQL+'' where ''+@sWhere
set @sSQL=@sSQL+'' order by ''+@OName
if @ODirect=1
set @sSQL=@sSQL+'' desc''
set @sSQL=@sSQL+'')t)''
if @sWhere!=''''
set @sSQL=@sSQL+'' and ''+@sWhere
set @sSQL=@sSQL+'' order by ''+@OName
if @ODirect=1
set @sSQL=@sSQL+'' desc''
exec sp_executesql @sSQL
set nocount off
GO