SQLServer 存储过程 带事务处理实例(二)

SQLServer 存储过程 带事务处理实例(二),第1张

概述CREATE PROCEDURE [dbo].********( @smallOrderNo varchar(50), @phoneModel varchar(50), @beginSn varchar(50), @endSn varchar(50))AS SET NOCOUNT ON declare @error int = 0 ---事务中的错误记录,定义存储
CREATE PROCEDURE [dbo].********(	@smallOrderNo varchar(50),@phoneModel varchar(50),@beginSn varchar(50),@endSn varchar(50))AS 	SET NOCOUNT ON	declare @error int = 0				---事务中的错误记录,定义存储过程中的变量(类似程序中的变量设定)  	declare @errerMsg varchar(500)		---事物中的错误信息记录	declare @earlyimportDate datetime	---查找到的最早的包装数据	declare @fiveDaysAgo datetime		---当前系统时间的5天前时间点	create table #macSnTemp					--创建临时表	(		orderNo varchar(50),mac varchar(50),sn varchar(50),BoxNo varchar(50),status varchar(50),currentBoxNum int,BoxNumMax int,smallOrderNo varchar(50),sortBoxNum int,importNum int,importDate datetime,exportDate datetime,phoneModel varchar(50),zpuz varchar(50),rfpi varchar(50),bigBatchNo varchar(50),smallBatchNo varchar(50)	)	begin								--插入临时表,用以数据 *** 作		insert into #macSnTemp			select orderNo,mac,sn,BoxNo,status,currentBoxNum,BoxNumMax,smallOrderNo,sortBoxNum,importNum,importDate,exportDate,phoneModel,zpuz,rfpi,bigBatchNo,smallBatchNo					from macSnInfo			where	(smallOrderNo=@smallOrderNo or @smallOrderNo='') 				and (phoneModel=@phoneModel or @phoneModel='')  				and (sn>=@beginSn or  @beginSn='') 				and (sn<=@endSn or  @endSn='') 	end  	--设置事物回滚机制,xact_abort为 on,回滚整个事务	set xact_abort on 	--开启事务	begin transaction 		if not exists(select * from #macSnTemp)			begin				set @errerMsg='没有查询到订单数据!'    				rollback transaction  				select @errerMsg AS errorMsg				return -1 --设置 *** 作结果错误标识   			end		select top 1 @earlyimportDate = importDate from  #macSnTemp			--将最早的包装时间赋值			where BoxNo is not null			order by importDate		select @fiveDaysAgo =DateAdd(day,-5,getdate())				--系统5天前时间	 		if exists(select mac from #macSnTemp where (mac ='' or mac is null))			begin 				set @errerMsg='该订单信息内不含mac,非正常彩盒包装数据,无法删除!'    				rollback transaction  				select @errerMsg AS errorMsg				return -1 --设置 *** 作结果错误标识  				  			end 		else if(ISNulL(@earlyimportDate,'1900-01-01 00:00:00.000')<@fiveDaysAgo)			begin 				set @errerMsg='该订单信息最早包装时间在5天之前,不允许清空订单包装数据!'    				rollback transaction  				select @errerMsg AS errorMsg				return -1 --设置 *** 作结果错误标识   			end		else			begin				-------------进行数据备份				insert into del_bak_macSnInfo 					select orderNo,smallBatchNo,getdate()  							from #macSnTemp									set @error+=@@ERROR --记录有可能产生的错误号  					-------------备份完清空包装数据				update macSnInfo set sn=null,BoxNo=null,status=null,currentBoxNum=null,BoxNumMax=null,sortBoxNum=null,importNum=null,importDate=null,exportDate=null,zpuz=null,rfpi=null,bigBatchNo=null,smallBatchNo=null				where	(smallOrderNo=@smallOrderNo or @smallOrderNo='') 						and (phoneModel=@phoneModel or @phoneModel='')  						and (sn>=@beginSn or  @beginSn='') 						and (sn<=@endSn or  @endSn='')				set @error+=@@ERROR --记录有可能产生的错误号  			endif(@error<>0 or @errerMsg<>'')    begin      rollback transaction  	select '-1' AS errorMsg	delete from #macSnTemp;				--删除临时表    return -1 --设置 *** 作结果错误标识  	  end  else    begin      commit transaction   	select '1' AS errorMsg	delete from #macSnTemp;				--删除临时表    return 1 -- *** 作成功的标识  	  end  
总结

以上是内存溢出为你收集整理的SQLServer 存储过程 带事务处理实例(二)全部内容,希望文章能够帮你解决SQLServer 存储过程 带事务处理实例(二)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1173132.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存