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,有异常返回具体的异常信息 ) AS declare @StartIndex int declare @Endindex int declare @maxPage int BEGIN BEGIN TRY -- 异常捕获 set @totalsql = N'select @totalCount=' + @totalsql; --执行 EXEC SP_EXECUTEsql @totalsql,N'@totalCount int OUTPUT',@totalCount OUTPUT --判断当前页是否超出总页 IF 0 != @totalCount BEGIN SET @maxPage = (@totalCount / @pageSize); IF 0 != (@totalCount % @pageSize) SET @maxPage = @maxPage + 1 IF @currentPage > @maxPage SET @currentPage = @maxPage END ELSE SET @currentPage = 1 SET @newCurrentPage = @currentPage set @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 TRY BEGIN 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,@R_845_4045@ion) 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,有异常返回具体的异常信息 ) AS DECLARE @beforesql nvarchar(max) --查询sql的头部 DECLARE @midsql nvarchar(max) --中间公用的sql DECLARE @querysql nvarchar(max) --查询sql(去掉头部的select和尾部的排序sql) DECLARE @ordersql nvarchar(max) --尾部的排序sql DECLARE @totalsql nvarchar(max) --查询总记录数sql(去掉头部的select) DECLARE @xml xml --查询条件的XML DECLARE @outSidnvarchar(100) DECLARE @beginTime nvarchar(100) DECLARE @endTime nvarchar(100) BEGIN BEGIN TRY -- 异常捕获 --必须放在最前面,紧接着事务点 set @xml = SUBSTRING(@conditionXml,39,LEN(@conditionXml)-38); select @outSid = c.doc.value('outSid[1]','varchar(100)'),@beginTime = c.doc.value('beginTime[1]',@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 + @midsql SET @totalsql = 'count(*)' + @midsql EXEC P_Common_Pagination @currentPage,@pageSize,@querysql,@ordersql,@totalsql,@totalCount output,@newCurrentPage output,@exceptionMsg output; END TRY BEGIN 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,@exceptionMsg); END CATCH END
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。