SQL Server分页存储过程(已通过验证)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

我从别处拷贝的代码,但在条件判断的位置出问题,我改动了下上传,给大家分享!

use users

go

if exists(select name from sysobjects where name='pages' and xtype='p')

drop proc pages

go

CREATE PROC pages

@tblName varchar(255), -- 表名

@strGetFields varchar(1000), -- 需要返回的列

@fldName varchar(255), -- 排序的字段名

@PageSize int, -- 多少条/页

@PageIndex int, -- 页码

@doCount bit, -- 返回记录总数, 0不返回,1返回

@OrderType bit, -- 设置排序类型, 0升序,1降序

@strWhere varchar(1500) -- 查询条件(注意: 不要加where)

AS

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

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

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

--如果@doCount传递过来的不是0,就执行总数统计。

if @doCount != 0

begin

--查询条件为空

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

--查询条件不为空

if @strWhere !=''

set @strSQL = 'select count(*) as Total from ' + @tblName + ' where '+@strWhere end

--以下的所有代码都是@doCount为0的情况:

--如果@OrderType是1,就执行降序,否则为升序!

else

begin

--查询条件为空

set @strTmp = '>(select max'

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

--查询条件不为空

if @OrderType = 1

begin

set @strTmp = '<(select min'

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

end

--如果是第一页就执行代码,这样会加快执行速度

if @PageIndex = 1

begin

--查询条件为空

set @strSQL='select top '+str(@PageSize)+' '+@strGetFields+' from '+@tblName+' '+@strOrder

--如果查询条件不为空,

if @strWhere != ''

set @strSQL='select top '+str(@PageSize)+' '+@strGetFields+' from '+@tblName+' where '+@strWhere+' '+@strOrder

end

--如果不是第一页,则

else

begin

--以下代码赋予了@strSQL以真正执行的SQL代码

--sql查询语句

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

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

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

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

--如果查询条件不为空,则另写sql语句

if @strWhere != ''

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

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

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

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

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

end

end

exec (@strSQL)

GO

--运行存储过程pages

--表名varchar,要返回的列名(*为返回所有)varchar,排序的列varchar,每页显示数量int, --第几页int,是否统计总数bit,是否降序排列bit,排列条件(不要带where)varchar

--统计borrow表的记录数量

exec pages 'uu','*','',0,0,1,0,''

--按borrowid排倒序分别显示1、2、3页的信息

exec pages 'uu','*','uid',4,1,0,1,''

exec pages 'uu','*','uid',4,2,0,1,'uid is not null'

exec pages 'uu','*','uid',4,3,0,1,''

相关文档
最新文档