您的位置:首页 > 数据库

通用SQL分页过程

2009-04-25 18:24 120 查看
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[sp_Select_Page]
(
@pageSize int , --一页要显示的行数
@pageIndex int, --第几页 参数
@tabname nvarchar(100), --对那张表
@tdname nvarchar(200), --需要那些字段
@where nvarchar(2000), --条件
@order nvarchar(200), --排序规则 例如 order by id,name
@orderd nvarchar(200), --反排序 例如 order by id desc,name desc
@recount int=1 output, --得到查询的总条数
@pagsum int=1 output --得到查询的总页数
)
AS
BEGIN
Declare @sql nvarchar(4000) --变量
Declare @sql1 nvarchar(4000)
set @sql1='select @recount=count(*) from '+@tabname +' '+@where
exec sp_executesql @sql1,N'@recount int out ',@recount out
print @recount
if(@recount%@pageSize)=0
begin
set @pagsum=@recount/@pageSize
end
else
begin
set @pagsum=@recount/@pageSize+1
end
print @pagsum
if((@pageSize*@pageIndex)<@recount)
begin
set @sql='select '+ 'top '+str(@pageSize*@pageIndex)+'' +@tdname +' from ' +@tabname +' '+@where+' '+@order
set @sql1='select '+ 'top '+str(@pageSize)+'' +@tdname +' from ('+@sql +') as a ' +@orderd
set @sql='select '+ @tdname +' from (' +@sql1+') as b ' +@where+' '+@order
end
else
begin
set @sql='select '+ 'top '+str(@pageSize*@pageIndex)+'' +@tdname +' from ' +@tabname +' '+@where+' '+@order
set @sql1='select '+ 'top '+str(@recount-@pageSize*(@pageIndex-1))+'' +@tdname +' from ('+@sql +') as a '+@orderd
set @sql='select '+ @tdname +' from (' +@sql1+') as b ' +@where+' '+@order
end
print @sql
print 3
exec sp_executesql @sql
END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: