參數注釋得比較清晰,就不另外說明了。

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