您的位置:首页 > 数据库

sql通用多表分页存储过程

2013-11-22 10:29 375 查看
--exec upGetPagerInfo @itemsPerPage=10,@currentPageIndex=12,@selectCommand='select * from [user]',
@sortField='createtime',@OrderType=0,@idField='ID'

ALTER PROCEDURE [dbo].[upGetPagerInfo]
@itemsPerPage int=0, --页尺寸
@currentPageIndex int=1, --页码
@selectCommand varchar(4000), --查寻语句
@sortField varchar(100)='',--排序的字段名
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@idField varchar(50)='',--根据分页的字段,为主键
@dataType int=1
AS
set nocount on
declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
declare @forwardPageCount int --以浏览的记录总数

if @OrderType != 0

begin

-- set @strTmp = '<(select min'

set @strOrder = ' order by ['+ @sortField +'] desc'

--如果@OrderType不是0,就执行降序,这句很重要!

end

else

begin

--set @strTmp = '>(select max'

set @strOrder = ' order by ['+ @sortField +'] asc'

end
if @dataType=0
exec('select count(*) from ('+@selectCommand+' ) as t0')
--记录总数
else if @dataType=1
BEGIN
if @currentPageIndex=1
begin

set @forwardPageCount=@itemsPerPage * (@currentPageIndex-1)

exec('select top '+@itemsPerPage+' * from ('+@selectCommand+' ) as t0 '+@strOrder )

--如果是第一页就执行以上代码,这样会加快执行速度

end
else
begin
set @forwardPageCount=@itemsPerPage * (@currentPageIndex-1) -->(select max(@idField)from (select top '+@forwardPageCount+' '+@idField+' from ('+@selectCommand+') as t0 order by '+@sortField+' ) order by '+@sortField)
--exec('select top '+@itemsPerPage+' * from ('+@selectCommand+' ) as t0 where '+@idField+' not in (select top '+@forwardPageCount+' '+@idField+' from ('+@selectCommand+') as t0 order by '+@sortField+' ) order by '+@sortField)
exec('select top '+@itemsPerPage+' * from ('+@selectCommand+' ) as t0 where '+@idField+' not in (select top '+@forwardPageCount+' '+@idField+' from ('+@selectCommand+') as t0 '+@strOrder+' ) '+@strOrder)
end
END
else
BEGIN
if @currentPageIndex=1
begin
set @forwardPageCount=@itemsPerPage * (@currentPageIndex-1)
exec('select top '+@itemsPerPage+' * from ('+@selectCommand+' ) as t0 '+@strOrder )
end
else
begin
set @forwardPageCount=@itemsPerPage*(@currentPageIndex-1)
exec('select top '+@itemsPerPage+' * from ('+@selectCommand+' ) as t0 where '+@idField+'<(select min(id) from (select top '+@forwardPageCount+' '+@idField+' from ('+@selectCommand+') as t0 '+@strOrder+' )t1) '+@strOrder)
end

END
set nocount off
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: