通用分页显示查询存储过程
2008-04-27 22:03
309 查看
/*
功能描述:通用分页显示查询
条件:表中不存在标示递增字段
输入参数:
@tblName:表名
@strGetFields:需要返回的列'*':返回所以列信息
@fldName:排序的字段名
@OrderType:设置排序类型,非0值则降序
@PageSize:页尺寸
@PageIndex:页码
@doCount:返回记录总数,非0值则返回
@strOrderBy:缺省排序字段信息(注意:不要加ORDERBY)
格式:Field1DESC,Field2ASC,
@strWhere:查询条件(注意:不要加WHERE)
输出参数:@RecordCount:记录总数
作者:ningfeiyang
创建时间:2005-01-19
更改纪录:
*/
ALTERPROCEDUREPagination2
(
@tblNamevarchar(255),
@strGetFieldsvarchar(1000)='*',
@fldNamevarchar(255)=',
@PageSizeint=10,
@PageIndexint=1,
@doCountbit=0,
@OrderTypebit=0,
@strOrderByvarchar(500)=',
@strWherevarchar(1500)=',
@RecordCountintoutput
)
AS
DECLARE@strSQLvarchar(5000)--主语句
DECLARE@strTmpvarchar(200)--临时变量
DECLARE@strOrdervarchar(400)--排序变量
--如果@doCount传递过来的不是0,就执行总数统计
IF(@doCount!=0)
BEGIN
DECLARE@sWherevarchar(2000)
SET@sWhere='
IF(@strWhere!=')
SET@sWhere='WHERE'+@strWhere
SET@strSQL='ifexists(select*fromdbo.sysobjectswhereid=object_id('[dbo].[tmpTable]')andOBJECTPROPERTY(id,'IsUserTable')=1)'
SET@strSQL=@strSQL+'UPDATEtmpTableSETTotal=(SELECTCOUNT(*)FROM['+@tblName+']'+@sWhere+')'
SET@strSQL=@strSQL+'ELSESELECTCOUNT(*)ASTotalINTOtmpTableFROM['+@tblName+']'+@sWhere
EXEC(@strSQL)
SELECT@RecordCount=TotalFROMtmpTable
--删除总数统计临时表
EXEC('DROPTABLEtmpTable')
END
--PRINT@RecordCount
--如果@OrderType不是0,就执行降序
IF(@OrderType!=0)
BEGIN
SET@strTmp='<(SELECTMIN'
SET@strOrder='ORDERBY'+@strOrderBy+'['+@fldName+']DESC'
END
ELSE
BEGIN
SET@strTmp='>(SELECTMAX'
SET@strOrder='ORDERBY'+@strOrderBy+'['+@fldName+']ASC'
END
--如果是第一页就执行以上代码,这样会加快执行速度
IF@PageIndex=1
BEGIN
IF@strWhere!='
SET@strSQL='SELECTTOP'+str(@PageSize)+''+@strGetFields+'FROM['+@tblName+']WHERE'+@strWhere+''+@strOrder
ELSE
SET@strSQL='SELECTTOP'+str(@PageSize)+''+@strGetFields+'FROM['+@tblName+']'+@strOrder
END
ELSE
BEGIN
--为搜索表建立自动编号保存到临时表中
SET@strSQL='SELECTTOP'+str(@PageIndex*@PageSize)+'IDENTITY(int,1,1)ASIID,'+@strGetFields+'INTO#tmpTableFROM['+@tblName+']'
IF@strWhere!='
SET@strSQL=@strSQL+'WHERE'+@strWhere+''+@strOrder
ELSE
SET@strSQL=@strSQL+@strOrder
--以下代码赋予了@strSQL以真正执行的SQL代码
SET@strSQL=@strSQL+'SELECTTOP'+str(@PageSize)+''+@strGetFields+'FROM#tmpTable'
+'WHEREIID'+@strTmp+'(IID)FROM(SELECTTOP'+str((@PageIndex-1)*@PageSize)+'IIDFROM#tmpTable)AStblTmp)DROPTABLE#tmpTable'
END
--PRINT@strSQL
--执行分页查询
EXEC(@strSQL)
功能描述:通用分页显示查询
条件:表中不存在标示递增字段
输入参数:
@tblName:表名
@strGetFields:需要返回的列'*':返回所以列信息
@fldName:排序的字段名
@OrderType:设置排序类型,非0值则降序
@PageSize:页尺寸
@PageIndex:页码
@doCount:返回记录总数,非0值则返回
@strOrderBy:缺省排序字段信息(注意:不要加ORDERBY)
格式:Field1DESC,Field2ASC,
@strWhere:查询条件(注意:不要加WHERE)
输出参数:@RecordCount:记录总数
作者:ningfeiyang
创建时间:2005-01-19
更改纪录:
*/
ALTERPROCEDUREPagination2
(
@tblNamevarchar(255),
@strGetFieldsvarchar(1000)='*',
@fldNamevarchar(255)=',
@PageSizeint=10,
@PageIndexint=1,
@doCountbit=0,
@OrderTypebit=0,
@strOrderByvarchar(500)=',
@strWherevarchar(1500)=',
@RecordCountintoutput
)
AS
DECLARE@strSQLvarchar(5000)--主语句
DECLARE@strTmpvarchar(200)--临时变量
DECLARE@strOrdervarchar(400)--排序变量
--如果@doCount传递过来的不是0,就执行总数统计
IF(@doCount!=0)
BEGIN
DECLARE@sWherevarchar(2000)
SET@sWhere='
IF(@strWhere!=')
SET@sWhere='WHERE'+@strWhere
SET@strSQL='ifexists(select*fromdbo.sysobjectswhereid=object_id('[dbo].[tmpTable]')andOBJECTPROPERTY(id,'IsUserTable')=1)'
SET@strSQL=@strSQL+'UPDATEtmpTableSETTotal=(SELECTCOUNT(*)FROM['+@tblName+']'+@sWhere+')'
SET@strSQL=@strSQL+'ELSESELECTCOUNT(*)ASTotalINTOtmpTableFROM['+@tblName+']'+@sWhere
EXEC(@strSQL)
SELECT@RecordCount=TotalFROMtmpTable
--删除总数统计临时表
EXEC('DROPTABLEtmpTable')
END
--PRINT@RecordCount
--如果@OrderType不是0,就执行降序
IF(@OrderType!=0)
BEGIN
SET@strTmp='<(SELECTMIN'
SET@strOrder='ORDERBY'+@strOrderBy+'['+@fldName+']DESC'
END
ELSE
BEGIN
SET@strTmp='>(SELECTMAX'
SET@strOrder='ORDERBY'+@strOrderBy+'['+@fldName+']ASC'
END
--如果是第一页就执行以上代码,这样会加快执行速度
IF@PageIndex=1
BEGIN
IF@strWhere!='
SET@strSQL='SELECTTOP'+str(@PageSize)+''+@strGetFields+'FROM['+@tblName+']WHERE'+@strWhere+''+@strOrder
ELSE
SET@strSQL='SELECTTOP'+str(@PageSize)+''+@strGetFields+'FROM['+@tblName+']'+@strOrder
END
ELSE
BEGIN
--为搜索表建立自动编号保存到临时表中
SET@strSQL='SELECTTOP'+str(@PageIndex*@PageSize)+'IDENTITY(int,1,1)ASIID,'+@strGetFields+'INTO#tmpTableFROM['+@tblName+']'
IF@strWhere!='
SET@strSQL=@strSQL+'WHERE'+@strWhere+''+@strOrder
ELSE
SET@strSQL=@strSQL+@strOrder
--以下代码赋予了@strSQL以真正执行的SQL代码
SET@strSQL=@strSQL+'SELECTTOP'+str(@PageSize)+''+@strGetFields+'FROM#tmpTable'
+'WHEREIID'+@strTmp+'(IID)FROM(SELECTTOP'+str((@PageIndex-1)*@PageSize)+'IIDFROM#tmpTable)AStblTmp)DROPTABLE#tmpTable'
END
--PRINT@strSQL
--执行分页查询
EXEC(@strSQL)
相关文章推荐
- 通用分页显示查询存储过程(献给朋友们)
- 通用分页显示查询存储过程(献给朋友们)
- 通用分页显示查询存储过程(SQL Server)
- SQL Server 的通用分页显示存储过程
- SQL Server 索引使用分析(3)- 通用分页显示存储过程
- SQL Server 的通用分页显示存储过程
- 适合千万数据查询分页操作的一个通用存储过程
- 实现小数据量和海量数据的通用分页显示存储过程
- SQL Server 分页查询通用存储过程
- 通用的可带查询条件的SQL语句的分页存储过程(2)
- SQL Server 的通用分页显示存储过程
- SQL Server 的通用分页显示存储过程
- 实现小数据量和海量数据的通用分页显示存储过程
- SQL之通用查询分页存储过程
- 通用分页查询存储过程
- 实现小数据量和海量数据的通用分页显示存储过程
- 一个查询数据库所有表的存储过程(允许按表名模糊查询一级按显示数量进行分页)
- 实现小数据量和海量数据的通用分页显示存储过程
- sql server 的通用分页显示存储过程
- 自己动手写一个通用的分页存储过程(适用于多表查询)