加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 13:47:46 所属栏目:MsSql教程 来源:网络整理
导读:CREATE PROCEDURE [dbo].********(@sn varchar(50))ASSET NOCOUNT ONDeclare@parentSn varchar(20),--父SN,VCP41@childSn1 varchar(20),--子SN1,CPE80@childSn2 varchar(20),--子SN2,CPE80@error int = 0,---事务中的错误记录,定义存储过程中的变量(类似
CREATE PROCEDURE [dbo].********
(
	@sn varchar(50)
)
AS
	SET NOCOUNT ON
	Declare
		@parentSn varchar(20),--父SN,VCP41
		@childSn1 varchar(20),--子SN1,CPE80
		@childSn2 varchar(20),--子SN2,CPE80
		@error int = 0,---事务中的错误记录,定义存储过程中的变量(类似程序中的变量设定)  
		@errerMsg varchar(500)		---事物中的错误信息记录

	CREATE TABLE #t_binding_relation		--创建绑定关系临时表
	(
		parent varchar(50),child varchar(50),smallOrderNumber varchar(80),)
	
	begin			---将全部数据放入临时表,便于后面的数据操作而不锁表
		insert into #t_binding_relation 
			select parent,child,smallOrderNumber from t_binding_relation 
	end
	 
	--设置事物回滚机制,xact_abort为 on,回滚整个事务
	set xact_abort on 
	--开启事务
	begin transaction 
	 ---------------------------------输入的SN是parentSn------------------- 
		IF exists(select 1 from #t_binding_relation where parent=@sn)	
			begin
			 
				select @parentSn=@sn		--赋值parentSN
				select top 1 @childSn1=child from #t_binding_relation where parent= @parentSn					--拆分出两个childSn
				select @childSn2=child from #t_binding_relation where parent= @parentSn and child <>@childSn1
			end
		---------------------------------输入的SN是childSN-----------------------
		ELSE  IF exists(select 1 from t_binding_relation where child=@sn)
			begin
				select @childSn1 = @sn		--赋值childSN1 
				select top 1 @parentSn=parent from #t_binding_relation where child= @childSn1
				select @childSn2 = child from #t_binding_relation where parent=@parentSn and child<>@childSn1 

			end
		else
			begin 
				set @errerMsg='该SN不存绑定关系,请确认!'    
				rollback transaction  
				select @errerMsg AS errorMsg
				return -1 --设置操作结果错误标识   
			end

		--------------------------------开始备份,删除数据-------------------------------------- 
		BEGIN
			insert into del_bak_binding_relation 
				select parent,smallOrderNumber,getdate()   
					from #t_binding_relation 
				where parent=@parentSn and child in(@childSn1,@childSn2)

			------备份完数据删除正式表的数据
			delete from t_binding_relation
				where parent=@parentSn and child in(@childSn1,@childSn2)

			---删除临时表
			delete from #t_binding_relation
		END
		
		
 

if(@error<>0 or @errerMsg<>'')  
  begin  
    rollback transaction  
	select '-1' AS errorMsg
    return -1 --设置操作结果错误标识  
	
  end  
else  
  begin  
    commit transaction   
	select '1' AS errorMsg
    return 1 --操作成功的标识  
	
  end  

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读