管志鹏的计算机主页

C# ASP.NET Java J2EE SSH SQL Server Oracle
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

SqlServer 2005 row_number 通用分页存储过程

Posted on 2012-08-29 14:04  管志鹏  阅读(420)  评论(0编辑  收藏  举报

每次都去复制这些相同的代码,处理分页操作,一直懒的去写一个通用的存储过程去处理,正好一个项目刚结束,把代码整理了一下,写了一个通用的存储过程,以便提高以后的开发效率

--Author:Jrian
--
Date: 2012年8月29日
create proc [dbo].[Proc_Pager]
    @pageIndex int=1--当前页
    @pageSize int=10--一页显示条数
    @columnName nvarchar(500)='*'--列名
    @tableName nvarchar(500)='',   --表名
    @orderColumn nvarchar(500)='OID'--排序列,
    @where varchar(1500)=''--条件
    @rowcount int output     --总记录条数
as
begin
declare @beginRow int,--起始行
        @endRow int,  --结束行
        @sql nvarchar(3000) ,
        @sqlfrom nvarchar(100), 
        @sqlWhere nvarchar(2000),
        @sqlCount nvarchar(1000)
       
        set @beginRow =(@pageIndex-1)*@pageSize+1
        set @endRow = @pageIndex*@pageSize

        set @sql =N' select row_number() over(order by '+@orderColumn+' desc) as rowId, '+@columnName
        set @sqlfrom =' from '+@tableName+''

    --是否在条件
    if len(@where)>0
        set @sqlWhere=' where '+@where
    else
        set @sqlWhere=' '

        --总记录条数
        set @sqlCount='select @count=count(0) '+@sqlfrom+' '+@sqlWhere
        exec sp_executesql @sqlCount, N'@count bigint output',@count=@rowcount output


        set @sql =@sql+@sqlfrom+@sqlWhere
        set @sql='select * from ( '+@sql+') as t where rowId between '+convert(varchar,@beginRow+' and '+convert(varchar,@endRow)
        exec (@sql)
end
go

--declare @rowcount int 
--
exec [Proc_Pager] 1,10,'so.*,sob.lparentID','ShipOrder so INNER JOIN ShipOrderBody sob on so.OID=sob.lParentID','so.OID,sob.lparentID','vCustomerCode like ''%500%''',@rowcount output

--print @rowcount