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