您的位置:首页 > 数据库

SQL Server 2000通用分页查询存储过程(可指定返回字段,查询条件)

2007-12-23 15:27 966 查看
作者: LikeCode 出处: CODE STUDIO

目前还有广大的用户在使用 Micrisoft SQL Server 2000, 但这个版的 DB 很致命的一个缺点是查询时不可指定返回行号的数据, 起码没有直接可用的关键字或方法, 幸好人类的智慧是无穷的(^^), 没有直接的方法就用间接的方法.

通用分页查询存储过程不同的版本多如牛毛, 我用过多种, 感觉还是李天王代码自动生成器里的那个好用, 在效率和功能上都做到很好的平衡, 我稍稍修改一下, 加个一个字段选择变量, 这样就可以指定返回的字段.

SQL 脚本如下:


if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetRecordByPage]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)


drop procedure [dbo].[GetRecordByPage]


GO




CREATE PROCEDURE GetRecordByPage


@tblName varchar(255), -- 表名


@fldName varchar(255), -- 主键字段名


@PageSize int = 10, -- 页尺寸


@PageIndex int = 1, -- 页码


@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序


@strWhere varchar(1000) = '', -- 查询条件 (注意: 不要加 where)


@IsReCount bit = 0, -- 返回记录总数, 非 0 值则返回


@FieldList varchar(200) -- 返回的字段


AS




declare @strSQL varchar(6000) -- 主语句


declare @strTmp varchar(100) -- 临时变量


declare @strOrder varchar(400) -- 排序类型


if @PageIndex = 0


begin


set @PageIndex = 1


end


if @OrderType != 0


begin


set @strTmp = '<(select min'


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


end


else


begin


set @strTmp = '>(select max'


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


end




if @strWhere != ''---条件不为空


set @strSQL = 'select top ' + str(@PageSize) + ' ' + @FieldList + ' from ['


+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['


+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['


+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '


+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder


else---条件为空


set @strSQL = 'select top ' + str(@PageSize) + ' ' + @FieldList + ' from ['


+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['


+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['


+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'


+ @strOrder




set @strTmp =''


if @strWhere != ''


set @strTmp = ' where ' + @strWhere




if @PageIndex = 1


begin


set @strSQL = 'select top ' + str(@PageSize) + ' ' + @FieldList + ' from ['


+ @tblName + ']' + @strTmp + ' ' + @strOrder


end




if @IsReCount != 0


set @strSQL = 'select count(*) as Total from [' + @tblName + ']'+ @strTmp




exec (@strSQL)

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