SqlServer通用的分页存储过程

[color=red][b]***只做分页查询用***[/b][/color]
/**
* procedure name : prcPageResult
* author : michael
* create date : 2009-02-17
*/
create procedure [b]procPageResult[/b]
[b]---获得某一页的数据---[/b]
@currPage int = 1, [b]--->当前页页码(即top currPage)[/b]
@showColumn varchar(2000) = '*', [b]--->需要查询的字段(即column1,column2,......)[/b]
@tabName varchar(2000), [b]--->需要查看的表名(即from table_name)[/b]
@strCondition varchar(2000) = '', [b]--->查询条件(即where condition......) 不用加where关键字[/b]
@ascColumn varchar(100) = '', [b]--->排序的字段名(即order by column asc/desc)[/b]
@bitOrderType int = 0, [b]--->排序的类型(0为升序,1为降序)[/b]
@pkColumn varchar(50) = '', [b]--->主键名称[/b]
@pageSize int = 20 [b]--->分页大小[/b]
[b]as[/b]
begin [b]--->存储过程开始[/b]
[b]---该存储过程需要用到的几个变量---[/b]
[b]declare[/b] @strTemp varchar(1000)
[b]declare[/b] @strSql varchar(4000) [b]--->该存储过程最后执行的语句[/b]
[b]declare[/b] @strOrderType varchar(1000) [b]--->排序类型语句(order by column asc/desc)[/b]
begin
if @bitOrderType = 1 [b]--->@bitOrderType = 1 即执行降序[/b]
begin
set @strOrderType = ' order by ' + @ascColumn + ' desc'
set @strTemp = '<(select min'
end
else
begin
set @strOrderType = ' order by ' + @ascColumn + ' asc'
set @strTemp = '>(select max'
end
if @currPage = 1 [b]--->如果是第一页[/b]
begin
if @strCondition != ''
set @strSql = 'select top ' + str(@pageSize) + ' ' + @showColumn + ' from ' + @tabName + ' where ' + @strCondition + @strOrderType
else
set @strSql = 'select top ' + str(@pageSize) + ' ' + @showColumn + ' from ' + @tabName + @strOrderType
end
else [b]--->其他页[/b]
begin
if @strCondition != ''
set @strSql = 'select top ' + str(@pageSize) + ' ' + @showColumn + ' from ' + @tabName + ' where ' + @strCondition + ' and ' +
@pkColumn + @strTemp + '(' + @pkColumn + ')' + ' from (select top ' + str((@currPage-1)*@pageSize) + ' ' + @pkColumn +
' from ' + @tabName + @strOrderType + ') as TabTemp)' + @strOrderType
else
set @strSql = 'select top ' + str(@pageSize) + ' ' + @showColumn + ' from ' + @tabName + ' where ' + @pkColumn + @strTemp +
'(' + @pkColumn + ')' + ' from (select top ' + str((@currPage-1)*@pageSize) + ' ' + @pkColumn + ' from ' +
@tabName + @strOrderType + ') as TabTemp)' + @strOrderType
end
end
[color=red][b]EXEC [/b][/color](@strSql)
end [b]--->存储过程结束[/b]
go
[color=blue][b]--------------------------------------------------------------------[/b][/color]
[b]调用方法:[/b]
procPageResult 1,'*','TableName','','CreateDate',1,'PkID',25
查询表TableName的所有字段的前25条记录,因为是第一页,排序字段为CreateDate,1表示降序排列,主键是PkID。这个存储过程的功能比较强大,用在项目中
非常的适用。尤其是在百万级数据上,它的优势就显露无疑了。此段代码是转载别人的。
[color=blue][b]---------------------------------------------------------------------[/b][/color]
[b]***查询表记录数***[/b]
/**
* procedure name : procRowsCount
* author : michael
* create date : 2009-02-17
*/
create procedure [b]procRowsCount[/b]
@tabName varchar(200), [b]--->需要查询的表名[/b]
@colName varchar(200) = '*', [b]--->需要查询的列名[/b]
@condition varchar(200) = '' [b]--->查询条件[/b]
[b]as[/b]
[b]begin[/b]
declare @strSql varchar(255)
if @condition = ''
set @strSql = 'select count(' + @colName + ') from ' + @tabName
else
set @strSql = 'select count(' + @colName + ') from ' + @tabName + ' where ' + @condition
[color=red][b]EXEC [/b][/color](@strSql)
end
[color=darkblue][b]-----------------------------------------------------------------------[/b][/color]
删除记录的通用存储过程和查询单条记录的通用存储过程希望有的朋友传一份,在这里感谢提供原通用分页查询存储过程的哥们,谢谢。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值