SQL存储过程分页排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | create procedure [dbo].[CommonDataPager] ( --用途:分页查询记录信息 --以下是几个参数的说明: --1.@tbName:表示表名 --2.@PrimaryKey:表的主键 --3.@searchCount:返回的结果数 --4.@fldNames:字段名,多个字段以逗号分割 --5.@PageSize:每页显示的记录数,如果为0,则表示不要分页,直接得到搜索、排序后的所有记录 --6.@PageIndex:当前页的索引 --7.@Filter:搜索条件,即在“ where ”后面写条件 --8.@Sort:排序项,即在“order by ”后面写排序项 --9.@joinTable:连接其他表 @tbName varchar(3000), @PrimaryKey varchar (255), @searchCount int output, @fldNames varchar(3000)= '*' , @PageSize int = 0, @PageIndex int = 1, @Filter nvarChar (3000)= '' , @Sort varchar (3000)= '' , @joinTable nvarchar(3000)= '' --调用的时候,可以类似如: as a inner join departInfo as b on a.departInfoId=b.Id ) as declare @start nvarchar (100) declare @end nvarchar (100) declare @m_WhereString varchar(4000) declare @sqlString nvarchar(4000) --动态拼接的SQL语句 declare @orderString nvarchar (4000) if (@PageSize < 0) begin set @PageSize=0; end if (@PageIndex < 1) begin set @PageIndex=1; end set @start = ltrim(rtrim(Cast((@PageSize*(@PageIndex - 1)+1) as varchar (100)))) --开始记录 set @end =ltrim(rtrim(Cast((@PageSize * @PageIndex) as varchar (100)))) --结束记录 set @m_WhereString= '' if (len(ltrim(rtrim(@Filter))) > 0) begin set @m_WhereString = ' where ' + @Filter; end if (len (ltrim (rtrim (@Sort))) > 0) begin set @orderString = ' order by ' + @Sort; end else begin set @orderString = ' order by ' + @PrimaryKey + ' asc ' end declare @sqlStringOutput nvarchar(3000) set @sqlStringOutput=N 'select @searchCount=count(*) from ' + @tbName + ' ' + @joinTable + ' ' + @m_WhereString; exec sp_executesql @sqlStringOutput,N '@searchCount int output' ,@searchCount output if (@PageSize = 0) begin --得到所有的搜索记录,并且不分页 set @sqlString= 'select ' + @fldNames + ' from ' + @tbName + @m_WhereString + ' ' + @orderString; end else begin --实现分页效果,并且根据搜索条件过滤、分页、排序 set @sqlString= 'select * from (select row_number() over(' + @orderString + ') as myNewId,' + @fldNames + ' from ' + @tbName + ' ' + @joinTable + ' ' + @m_WhereString + ' ) as MyTempTable where myNewId between ' + @start + ' and ' + @end + ' order by myNewId asc' ; end exec(@sqlString) go /* --测试调用存储过程 declare @count int set @count=0 exec [CommonDataPager] 'UserInfo','Id',@count output,'userName,userAge',15,1,'userName like ''[^n]%'' ','userName desc','' print @count */ |
代码如下:
新:
等待更新...
转载于:https://www.cnblogs.com/Music/archive/2010/08/14/SPCommonDataPager.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?