USE SCHOOL GO IF OBJECT_ID('P_STUDENT','P') ISNOTNULL DROPPROCEDURE P_STUDENT GO CREATEPROCEDURE P_STUDENT AS BEGIN BEGIN TRY BEGINTRANSACTION TRAN1 --外层事务 UPDATE STUDENT SET Age=10WHERENAME='Hello' BEGINTRANSACTION SUBTRAN1 --嵌套事务 INSERTINTO STUDENT(NAME,Age,SEX) VALUES('JAME',12,'男') COMMITTRANSACTION SUBTRAN1 COMMITTRANSACTION TRAN1 END TRY BEGIN CATCH IF @@TRANCOUNT > 0--@@TRANCOUNT>0表示在TRY块中的事务没有成功提交,那么就回滚整个外层事务 BEGIN PRINT @@TRANCOUNT SELECT ERROR_LINE(),ERROR_MESSAGE(),ERROR_PROCEDURE() ROLLBACKTRANSACTION TRAN1 END ELSE--ELSE就是@@TRANCOUNT的值为0,说明事务都已经全部提交了 SELECT * FROM dbo.STUDENT END CATCH END GO