博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SqlServer存储过程分页查询
阅读量:3560 次
发布时间:2019-05-20

本文共 3820 字,大约阅读时间需要 12 分钟。

ALTER PROCEDURE [dbo].[P_Common_Pagination]( @currentPage int, --当前页码 @pageSize int, --每页记录数 @querySQL nvarchar(max), --查询SQL @orderSQL nvarchar(max), --排序SQL @totalSQL nvarchar(max), --查询总记录数SQL @totalCount int output, --总记录数 @newCurrentPage int output, --返回的当前页码 @exceptionMsg nvarchar(4000) output --异常信息,无异常返回的是NULL,有异常返回具体的异常信息)ASdeclare @StartIndex intdeclare @EndIndex intdeclare @maxPage intBEGINBEGIN TRY -- 异常捕获set @totalSQL = N'select @totalCount=' + @totalSQL;  --执行  EXEC SP_EXECUTESQL @totalSQL,N'@totalCount int OUTPUT',@totalCount OUTPUT      --判断当前页是否超出总页  IF 0 != @totalCount   BEGINSET @maxPage = (@totalCount / @pageSize);IF 0 != (@totalCount % @pageSize)SET @maxPage = @maxPage + 1   IF @currentPage > @maxPage    SET @currentPage = @maxPage ENDELSESET @currentPage = 1    SET @newCurrentPage = @currentPageset @StartIndex = (@currentPage - 1)*@pageSize + 1;set @EndIndex = @currentPage*@pageSize;set @querySQL = N'SELECT *from (select ROW_NUMBER() over (' + @orderSQL + ') as rownum,'+ @querySQL+ ') tt where rownum between ' + cast(@StartIndex as varchar(50))+ ' and ' + cast(@EndIndex as varchar(50));EXEC (@querySQL)END TRYBEGIN CATCH --异常发生后,相应的事务等处理--异常信息set @exceptionMsg = '消息 ' + cast(ERROR_NUMBER() as varchar(50)) + ',级别 '+ cast(ERROR_SEVERITY() as varchar(50)) + ',状态 '+ cast(ERROR_STATE() as varchar(50)) + ',过程 ' + 'P_Common_Pagination'+ ',第 ' + cast(ERROR_LINE() as varchar(50)) + ' 行'+ ':' + ERROR_MESSAGE();INSERT INTO Logger(logType, information)VALUES('ERROR', @exceptionMsg);END CATCH    END

分页查询实例
ALTER PROCEDURE [dbo].[P_ExceptionWaybillPageList](@currentPage int, --当前页码@pageSize int, --每页记录数@conditionXml nvarchar(max), --条件参数XML字符串@totalCount int output, --总记录数@newCurrentPage int output, --返回的当前页码@exceptionMsg nvarchar(4000) output --异常信息,无异常返回的是NULL,有异常返回具体的异常信息)ASDECLARE @beforeSQL nvarchar(max) --查询SQL的头部DECLARE @midSQL nvarchar(max) --中间公用的SQLDECLARE @querySQL nvarchar(max) --查询SQL(去掉头部的select和尾部的排序SQL)DECLARE @orderSQL nvarchar(max) --尾部的排序SQLDECLARE @totalSQL nvarchar(max) --查询总记录数SQL(去掉头部的select)DECLARE @xml xml --查询条件的XMLDECLARE @outSidnvarchar(100)DECLARE @beginTime nvarchar(100) DECLARE @endTime nvarchar(100) BEGINBEGIN TRY -- 异常捕获--必须放在最前面,紧接着事务点set @xml = SUBSTRING(@conditionXml,39,LEN(@conditionXml)-38); select @outSid = c.doc.value('outSid[1]','varchar(100)'),@beginTime = c.doc.value('beginTime[1]','varchar(100)'),@endTime = c.doc.value('endTime[1]','varchar(100)')from @xml.nodes('/nodes/node') c(doc);   SET @beforeSQL = 'wb.OUT_SID, wb.COMPANY_NAME, wb.DELIVER_TIME'  SET @midSQL = ' FROM WAYBILL wb WHERE 1 = 1' --************************************ 查询条件处理start ************************************--IF ISNULL(@outSid, '') <> ''SET @midSQL = @midSQL + ' and wb.OUT_SID =  ''' + @outSid + '''';IF ISNULL(@beginTime, '') <> ''SET @midSQL = @midSQL + ' and wb.DELIVER_TIME  >= ''' + CONVERT(VARCHAR, CAST(@beginTime AS DATETIME), (23)) + '''';IF ISNULL(@endTime, '') <> ''SET @midSQL = @midSQL + ' and wb.DELIVER_TIME  < ''' + CONVERT(VARCHAR, CAST(@endTime AS DATETIME) + 1, (23)) + '''';--************************************ 查询条件处理end ************************************--SET @orderSQL = ' ORDER BY wb.DELIVER_TIME'SET @querySQL = @beforeSQL + @midSQLSET @totalSQL = 'count(*)' + @midSQLEXEC P_Common_Pagination @currentPage, @pageSize, @querySQL, @orderSQL, @totalSQL, @totalCount output, @newCurrentPage output, @exceptionMsg output;END TRYBEGIN CATCH --异常发生后,相应的事务等处理--异常信息set @exceptionMsg = '消息 ' + cast(ERROR_NUMBER() as varchar(50)) + ',级别 '+ cast(ERROR_SEVERITY() as varchar(50)) + ',状态 '+ cast(ERROR_STATE() as varchar(50)) + ',过程 ' + 'P_ExceptionWaybillPageList'+ ',第 ' + cast(ERROR_LINE() as varchar(50)) + ' 行'+ ':' + ERROR_MESSAGE();--异常日志INSERT INTO Logger(logType, information)VALUES('ERROR', @exceptionMsg);END CATCH    END

转载地址:http://lovrj.baihongyu.com/

你可能感兴趣的文章
半导体激光器—问题整理(二)
查看>>
科研日记7.31
查看>>
zemax仿真二向色镜
查看>>
stm32单片机编程时extern的用法
查看>>
UART4和5的问题
查看>>
Spring框架中在并发访问时的线程安全性
查看>>
网站部署
查看>>
什么情况下会发生栈内存溢出。
查看>>
何为去中心化
查看>>
缓存一致性:写策略
查看>>
Cache一致性:MESI
查看>>
缓存一致性:写未命中
查看>>
为什么用中间位作为组索引
查看>>
缓存:局部性
查看>>
mysql原理:b+树索引
查看>>
mysql原理:最左原则
查看>>
mysql原理:join标到底是什么,为什么有军规不建议超过三个
查看>>
redis缓存穿透
查看>>
redis缓存雪崩
查看>>
mysql的事务隔离
查看>>