Sql2005中分页存储过程


SET ANSI_NULLS ON
GO
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

alter PROCEDURE PageTest
 @tblName      varchar(255),       -- 表名
    @fldName      varchar(255),       -- 主键字段名
    @PageSize     int = 10,           -- 页尺寸
    @PageIndex    int = 1,            -- 页码
    @OrderType    bit = 1,            -- 设置排序类型, 非 0 值则降序
    @strWhere     varchar(1000) = '', -- 查询条件 (注意: 不要加 where)
    @PageCount int = 1 output,    -- 总页数
    @RecordCount int = 1 output       --总条数 
AS
 declare @strSQL   nvarchar(4000)       -- 主语句
 declare @strTmp   nvarchar(4000)       -- 临时变量
 declare @strOrder nvarchar(400)        -- 排序类型
 declare @strCount nvarchar(4000)       -- 统计条数
 declare @PageSizeStart int
 declare @PageSizeEnd int

if @OrderType != 0
begin
 set @strOrder =' order by '+@fldName+' desc '
end
else
begin
 set  @strOrder =' order by '+@fldName+' asc '
end

if @strWhere !=''
begin
 if str(@PageIndex) = 1
  set @strSQL = 'select top '+str(@PageSize)+' * from '+@tblName+' where '+@strWhere +''+@strOrder
 else
  begin
   set @PageSizeStart = (@PageIndex -1)*@PageSize+1
   set @PageSizeEnd = @PageIndex*@PageSize
   set @strSQL = 'select * from (select *, ROW_NUMBER() OVER('+@strOrder+') as row from
      '+@tblName+' where '+@strWhere+'  ) as A where row between '+@PageSizeStart+' and '+@PageSizeEnd
  end
end

else
begin
 if str(@PageIndex) = 1
  begin
   set @strSQL = 'select top '+str(@PageSize)+' * from '+@tblName+''+@strOrder
  end
 else
  begin
  set @PageSizeStart = (@PageIndex -1)*@PageSize+1
  set @PageSizeEnd = @PageIndex*@PageSize
  set @strSQL = 'select * from (select *, ROW_NUMBER() OVER('+@strOrder+') as row from
   '+@tblName+') as A where row between '+str(@PageSizeStart)+' and '+str(@PageSizeEnd)+''
  end
end  
------取得查询结果总数量-----
if @strWhere != ''
set @strCount = 'select @RecordCount = count(*) from [' + @tblName + ']'+' where ' + @strWhere
else
set @strCount = 'select @RecordCount = count(*) from [' + @tblName + ']'
exec sp_executesql @strCount,N'@RecordCount int out',@RecordCount out

--取得分页总数
if @RecordCount <= @PageSize 
 set @PageCount = 1
else
 set @PageCount = (@RecordCount-1)/@PageSize +1
print(@strSQL)
exec(@strSQL)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值