分页存储过程

create proc Hy_Comm_Page
@TableName varchar(100),--表名
@Key varchar(100),--主键名(id)
@Field varchar(500)='*',--查询字段
@where varchar(200),--查询条件 (参数不带where)
@Order varchar(100),--排序(id desc)
@Size int=10,--每页数据数
@Index int=1,--当前为第几页 
@Count int output--总纪录数
as
begin
declare @sql nvarchar(1000)=''
declare @orderStr varchar(100)=''
declare @whereStr varchar(200)=''
--判断排序
if(LEN(@Order)>0 )
set @orderStr=' order by '+@Order
--判断查询条件
if(LEN(@where)>0 )
set @whereStr=' where '+@where
--得到总纪录数
set @sql='select @CountVal=count(*) from '+@TableName+@whereStr
exec sp_executesql @sql,N'@CountVal int output',@CountVal=@Count  output  --总纪录数
--如果是第一页(提高效率)
if(@Index=1)
begin
set @sql='select top '+ltrim(str(@Size))+' '+@Field+' from '+@TableName+@whereStr+@orderStr
end
else
begin
declare @start int
declare @end int
if(@Count>@Size*(@Index-1))--所取纪录行存在
begin
set @start=@Size*(@Index-1)+1
set @end=@Size*@Index
if(@end>@Count)
set @end=@Count
declare @Row_NumOrder varchar(100)
--如果指定排序 为ROW_NUMBER指定 否则默认主键
if(LEN(@orderStr)=0)
set @Row_NumOrder=' order by '+@Key
else
set @Row_NumOrder=@orderStr
set @sql='select '+@Field+' from ( select ROW_NUMBER() over('+@Row_NumOrder+')as row_num, '+@Field+' from '+@TableName+@whereStr+') as t1  where row_num between '+LTRIM(str(@start))+' and '+LTRIM(str(@end))+@orderStr 
end
else
set @sql=''
end
--print @sql
exec (@sql)
end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值