分页存储过程
来源:互联网 发布:函数式编程思维 pdf 编辑:程序博客网 时间:2024/04/27 22:28
CREATE PROCEDURE sp_Pager
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='', -- 排序的字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@doCount varchar(5) = '0', -- 返回记录总数, 非 0 值则返回
@OrderType varchar(5) = '0', -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
declare @strFldName varchar(50)
if( charindex('.',@fldName) > 0 )
set @strFldName = stuff(@fldName,1,charindex('.',@fldName),'')
else
set @strFldName = @fldName
if @doCount != '0'
begin
if @strWhere != ''
set @strSQL = 'select count(1) as Total from ' + @tblName + ' where '+@strWhere
else
set @strSQL = 'select count(1) as Total from ' + @tblName
end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
else
begin
if @OrderType != '0'
begin
set @strTmp = '<(select min'
set @strOrder = ' order by ' + @fldName +' desc'
--如果@OrderType不是0,就执行降序,这句很重要!
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by ' + @fldName +' asc'
end
if @PageIndex = 1
begin
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @strWhere + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + @strOrder
--如果是第一页就执行以上代码,这样会加快执行速度
end
else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @strGetFields+ ' from '
+ @tblName + ' where ' + @fldName + @strTmp + '(['+ @strFldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + @fldName + ' from ' + @tblName + @strOrder + ') as tblTmp)'+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '
+ @tblName + ' where ' + @fldName + @strTmp + '(['
+ @strFldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @strFldName + '] from ' + @tblName + ' where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
end
end
print @strSQL
exec (@strSQL)
GO
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='', -- 排序的字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@doCount varchar(5) = '0', -- 返回记录总数, 非 0 值则返回
@OrderType varchar(5) = '0', -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
declare @strFldName varchar(50)
if( charindex('.',@fldName) > 0 )
set @strFldName = stuff(@fldName,1,charindex('.',@fldName),'')
else
set @strFldName = @fldName
if @doCount != '0'
begin
if @strWhere != ''
set @strSQL = 'select count(1) as Total from ' + @tblName + ' where '+@strWhere
else
set @strSQL = 'select count(1) as Total from ' + @tblName
end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
else
begin
if @OrderType != '0'
begin
set @strTmp = '<(select min'
set @strOrder = ' order by ' + @fldName +' desc'
--如果@OrderType不是0,就执行降序,这句很重要!
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by ' + @fldName +' asc'
end
if @PageIndex = 1
begin
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @strWhere + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + @strOrder
--如果是第一页就执行以上代码,这样会加快执行速度
end
else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @strGetFields+ ' from '
+ @tblName + ' where ' + @fldName + @strTmp + '(['+ @strFldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + @fldName + ' from ' + @tblName + @strOrder + ') as tblTmp)'+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '
+ @tblName + ' where ' + @fldName + @strTmp + '(['
+ @strFldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @strFldName + '] from ' + @tblName + ' where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
end
end
print @strSQL
exec (@strSQL)
GO
- orcale分页 存储过程分页
- 一个分页存储过程
- 一个分页存储过程
- 存储过程分页代码
- 分页存储过程
- 数据库分页存储过程
- 分页存储过程
- 一个分页存储过程
- 分页 SQLServer存储过程
- 分页 SQLServer存储过程
- 存储过程分页
- SqlServer分页存储过程
- 分页的存储过程
- 通用分页存储过程
- sql 存储过程分页
- 分页存储过程
- 分页存储过程2
- 分页的存储过程
- 一个逻辑推理问题?
- 重启有效
- 面向对象的脚本语言Ruby
- Heap
- 成功人士的三十二个好习惯
- 分页存储过程
- Linux 系统命令及其使用详解(大全)
- 我的分析
- pyGtk安装问题
- 来源不明转载:两粒砂的爱情故事
- UI工厂学习一
- 偏见、惯性与创意
- 一个好玩的站点
- DIV层的透明度设置!