您的位置:首页 > 其它

通用分页显示查询存储过程

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: