sql 存储过程 分页

sql存储过程 分页:

ALTER PROCEDURE [dbo].[BrokerToLenderDataShow2]
@Where VARCHAR(200), --查询条件 不含'where'字符,如id>10 and len(userid)>9
--@Order VARCHAR(200), --排序 不含'order by'字符,如id asc,userid desc,必须指定asc或desc 
--注意当@SortType=3时生效,记住一定要在最后加上主键,否则会让你比较郁闷
--@SortType INT, --排序规则 1:正序asc 2:倒序desc 3:多列排序方法
--@RecorderCount INT, --记录总数 0:会返回总记录
@PageSize INT, --每页输出的记录数
@PageIndex INT --当前页数,从1开始
--@TotalCount INT OUTPUT, --记返回总记录
--@TotalPageCount INT OUTPUT --返回总页数

AS
BEGIN
DECLARE @Sql VARCHAR(2000), @Sql2 NVARCHAR(2000),@sql3 nvarchar(2000),@BetweenStart int ,@BetweenEnd int


set @BetweenStart= convert(int,@PageSize*@PageIndex)-@PageSize+1
set @BetweenEnd=convert(int,@PageSize*@PageIndex)

set @Sql3= ' select * from ( SELECT ROW_NUMBER() over (ORDER BY b.ID ) RowNumber,
* from loanee b where 1=1 '+@Where+'
) t
where t.RowNumber BETWEEN ' + ltrim(str(@BetweenStart)) + ' and ' + ltrim(str(@BetweenEnd));
print @sql3

exec(@sql3)

END

 

-----------------------------------------------------------------------------------

-- 没有条件 的 调用
exec [BrokerToLenderDataShow2] ' ',10,1

--有条 的调用
exec [BrokerToLenderDataShow2] ' and id>10',10,1

下面一个小知识点ROW_NUMBER() 不排序的写法:

select ROW_NUMBER() over(order by (select 0)) AS ROWNUM,* FROM Product 
原文地址:https://www.cnblogs.com/yangjinwang/p/5030667.html