人家的,感觉不错,
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[PaginationDisplay]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[PaginationDisplay]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
/*
按页得到信息,得到记录总条数
*/
CREATE procedure PaginationDisplay
(
@TBName nvarchar(2000)='', --表名,默认为空
@PageSize int=10, --每页记录数,默认为10
@CurPage int=1, --当前页,默认第1页
@KeyField nvarchar(100)='ID', --@TBName表的关键字段名,默认为ID
@KeyAscDesc nvarchar(4)='ASC' , --关键字段的升、降序,默认为升序
@Fields nvarchar(500)='*', --所选择的列名,默认为全选
@Condition nvarchar(200)='' , --where条件,默认为空
@Order nvarchar(200)='' --排序条件,默认为空
)
as
if @TBName=''
begin
raiserror('请指定表名!',11,1)
return
end
if @PageSize<=0 or @CurPage<=0
begin
raiserror('每页记录数和当前页数都必须大于0!',11,1)
return
end
if @KeyAscDesc='DESC'
set @KeyAscDesc='<'
else
set @KeyAscDesc='>'
if @Condition <> ''
set @Condition=' where '+@Condition
declare @SQL nvarchar(4000)
set @SQL=''
set @SQL='select count(*) from '+@TBName+@Condition+''
select @SQL = 'declare @int int ;select @int = (' +@SQL +');'
select @SQL = @SQL+' declare @page int; if @int%'+convert(nvarchar(50),@PageSize)+' = 0 select @page = @int/'+convert(nvarchar(50),@PageSize)+' else select @page = @int/'+convert(nvarchar(50),@PageSize)+'+1;select @page'
execute sp_executesql @SQL
set @SQL=''
if @CurPage=1
begin
set @SQL=@SQL+'select top '+cast(@PageSize as nvarchar(20))+' '+@Fields+' from '+@TBName+@Condition+' '+@Order
end
else
begin
set @SQL=@SQL + 'declare @sLastValue nvarchar(100)' + char(13)
set @SQL=@SQL+'select top '+cast((@PageSize * (@CurPage - 1)) as nvarchar(20))+' @sLastValue='+@KeyField+' from '+@TBName+@Condition+' '+@Order+char(13)
declare @Condition2 nvarchar(200)
if @Condition=''
set @Condition2=' where '+@KeyField+@KeyAscDesc+'@sLastValue '
else
set @Condition2=' and '+@KeyField+@KeyAscDesc+'@sLastValue '
set @SQL=@SQL+'select top '+cast(@PageSize as nvarchar(20))+' '+@Fields+ ' from '+@TBName+@Condition+@Condition2+@Order
end
execute sp_executesql @SQL
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。