创建测试表T1 包含两个字符可变长度10的字段 DECLARE @_error INT DECLARE @_errormsg VARCHAR(4000) SET @_error = 0 BEGIN TRANSACTION OUTERTRAN BEGIN TRANSACTION INNER1 BEGIN TRANSACTION INNER2 --开始INNER2事务 PRINT '开始事务数' + CAST(@@TRANCOUNT AS VARCHAR(10)) INSERT INTO T1 VALUES ('300', '300') SET @_error = @@ERROR --SELECT @_errormsg = description FROM master.dbo.sysmessages --WHERE msglangid = 2052 and error = @_error PRINT '插入300后的返回错误值:' + CAST(@_error AS VARCHAR(10)) + @_errormsg IF @_error = 0 BEGIN COMMIT TRAN INNER2 END ELSE IF @@TRANCOUNT > 1 BEGIN PRINT 'COMMIT INNER2' COMMIT TRAN INNER2 END ELSE BEGIN PRINT 'ROLLBACK INNER2' ROLLBACK TRAN INNER2 END PRINT 'INNER2提交后事务数' + CAST(@@TRANCOUNT AS VARCHAR(10)) --开始INNER1事务 INSERT INTO T1 VALUES ('4001122234556676878889', '400') SET @_error = @@ERROR --SELECT @_errormsg = description FROM master.dbo.sysmessages --WHERE msglangid = 2052 and error = @_error PRINT '插入4001122234556676878889后的返回错误值:' + CAST(@_error AS VARCHAR(10)) + @_errormsg IF @_error = 0 BEGIN COMMIT TRAN INNER1 END ELSE IF @@TRANCOUNT > 1 BEGIN PRINT 'COMMIT INNER1' COMMIT TRAN INNER1 END ELSE BEGIN PRINT 'ROLLBACK INNER1' ROLLBACK TRAN INNER1 END PRINT 'INNER1提交后事务数' + CAST(@@TRANCOUNT AS VARCHAR(10)) --开始OUTERTRAN事务 INSERT INTO T1 VALUES ('5001122234556676878889', '500') SET @_error = @@ERROR -- SELECT @_errormsg = description FROM master.dbo.sysmessages -- WHERE msglangid = 2052 and error = @_error PRINT '插入5001122234556676878889后的返回错误值:' + CAST(@_error AS VARCHAR(10)) + @_errormsg IF @_error = 0 BEGIN COMMIT TRAN OUTERTRAN END ELSE IF @@TRANCOUNT > 1 BEGIN PRINT 'COMMIT: OUTERTRAN' COMMIT TRAN OUTERTRAN END ELSE BEGIN PRINT 'ROLLBACK: OUTERTRAN' ROLLBACK TRAN OUTERTRAN END PRINT '操作完成后事务数' + CAST(@@TRANCOUNT AS VARCHAR(10))