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
@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
相关文章推荐
- 字符串缓存实现的通用分页存储过程.sql
- [MSSQL]SQL通用存储过程分页,支持多表联合
- SQL之通用查询分页存储过程
- 使用系统存储过程实现的通用分页存储过程.sql
- SQL 分割字符串和通用分页查询存储过程
- 真正通用的SQL分页存储过程
- SQL 字符串缓存实现的通用分页存储过程
- 7.2.1 TOP n 实现的通用分页存储过程.sql
- 通用的可带查询条件的SQL语句的分页存储过程
- SQL 临时表缓存实现的通用分页存储过程
- TOP n 实现的通用分页存储过程.sql
- SQL 使用系统存储过程实现的通用分页存储过程
- 通用的SQL存储过程分页
- 通用sql分页存储过程
- SQL 实现随机分页的通用分页存储过程
- [SQL]通用的分页存储过程
- 一个通用的分页存储过程实现-SqlServer(附上sql源码,一键执行即刻搭建运行环境)
- MS SQLSERVER通用存储过程分页
- sql通用分页自定义表条件存储过程