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 存储过程 带事务处理实例(二)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)