标签:存储 set 分页 pagesize -- orderbyStr sql nvarchar sqlStr
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: 潇潇与偕 -- Create date: -- Description: 分页存储过程 -- ============================================= create PROCEDURE p_Common_DataPager_New @sqlstr nvarchar(max), --SQL statement @currentpage int, --page # @pagesize int, --size of page @rowcount int output, @pagecount int output AS BEGIN set nocount on declare @countSql nvarchar(max) declare @dataSql nvarchar(max) declare @dbwhitespaceIndex int=0 declare @orderbyStr nvarchar(max) --处理掉多余空格 set @dbwhitespaceIndex=CHARINDEX(' ',@sqlStr) while @dbwhitespaceIndex>0 begin set @sqlStr=REPLACE(@sqlStr,' ',' ') set @dbwhitespaceIndex=CHARINDEX(' ',@sqlStr) end print ('@orderbyStr:'+@orderbyStr) --组装无排序字段的查询sql if CHARINDEX('ORDER BY',@sqlStr)=0 begin --截取排序字段 set @orderbyStr='' set @dataSql='declare @tempTable table ( TemplTableSortId int ); select top '+CONVERT(nvarchar(10),@pagesize)+' dt.* from ( select ROW_NUMBER() over(order by t.TemplTableSortId) sortid,s.* from ('+@sqlstr+') s left join @tempTable t on 0=1) dt where dt.sortid> '+convert(nvarchar(10),(@currentpage-1)*@pagesize) end --组装有排序字段的sql else begin select @orderbyStr= SUBSTRING(@sqlStr,CHARINDEX('ORDER BY',@sqlStr),LEN(@sqlStr)) set @dataSql='select top '+CONVERT(nvarchar(10),@pagesize)+' dt.* from ( select ROW_NUMBER() over('+@orderbyStr+') sortid,'+ SUBSTRING(@sqlStr,CHARINDEX('SELECT',@sqlStr)+6,LEN(@sqlStr)-len(@orderbyStr)-6)+') dt where dt.sortid>'+convert(nvarchar(10),(@currentpage-1)*@pagesize) end --查询总行数 set @countSql='select @totalcount=count(*) from ('+ SUBSTRING(@sqlStr,0,LEN(@sqlStr)-len(@orderbyStr))+') t' exec sp_executesql @countSql, N'@totalcount int out',@rowcount out --计算总页数 set @pagecount=@rowcount/@pagesize if @rowcount%@pagesize>0 begin set @pagecount+=1 end exec(@dataSql) set nocount off END GO
标签:存储,set,分页,pagesize,--,orderbyStr,sql,nvarchar,sqlStr 来源: https://www.cnblogs.com/zjbky/p/15982127.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。