sqlserver 中在存储过程中的嵌套事物
发布时间:2020-12-12 14:07:11 所属栏目:MsSql教程 来源:网络整理
导读:TransProc 过程强制执行其事务,而不管执行事务的进程的事务模式。如果在事务活动时调用 TransProc,很可能会忽略 TransProc 中的嵌套事务,而根据对外部事务采取的最终操作提交或回滚其 INSERT 语句。如果由不含未完成事务的进程执行 TransProc,则在该过程
TransProc 过程强制执行其事务,而不管执行事务的进程的事务模式。如果在事务活动时调用 TransProc,很可能会忽略 TransProc 中的嵌套事务,而根据对外部事务采取的最终操作提交或回滚其 INSERT 语句。如果由不含未完成事务的进程执行 TransProc,则在该过程结束时,COMMIT TRANSACTION 将有效地提交 INSERT 语句。 CREATE TABLE TestTrans(Cola INT PRIMARY KEY,Colb CHAR(3) NOT NULL); GO ALTER PROCEDURE TransProc @PriKey INT,@CharCol CHAR(3),@error_out int output AS BEGIN TRANSACTION InProc_1 INSERT INTO TestTrans VALUES (@PriKey,@CharCol) INSERT INTO TestTrans VALUES (@PriKey + 1,@CharCol) set @error_out=@@error COMMIT TRANSACTION InProc_1; GO ALTER PROCEDURE TransProc_2 @PriKey INT,@error_out int output AS BEGIN TRANSACTION InProc INSERT INTO TestTrans VALUES (@PriKey + 2,@CharCol) INSERT INTO TestTrans VALUES (@PriKey + 3,@CharCol) set @error_out=@@error COMMIT TRANSACTION InProc; GO BEGIN TRANSACTION OutOfProc; DECLARE @ERROR INT; EXEC TransProc 100,'aaa',@error_out=@ERROR output EXEC TransProc_2 200,'bbb',@error_out=@ERROR output; print(@ERROR) IF ( @ERROR <= 0 ) BEGIN PRINT('提交事物') COMMIT TRANSACTION OutOfProc; END ELSE BEGIN PRINT('事物回滚') ROLLBACK TRANSACTION OutOfProc; END GO 当 SET XACT_ABORT 为 ON 时,如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。 ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/tsqlref9/html/cbcaa433-58f2-4dc3-a077-27273bef65b5.htm (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |