SQL Transcation的一些总结分享

2020-07-10 08:06:51易采站长站整理

— =============================================
ALTER PROCEDURE SPMultiDataToUserInfo
AS
BEGIN
BEGIN TRY
BEGIN TRANSACTION
PRINT ‘In [SPMultiDataToUserInfo] Transactions: ‘ + Convert(varchar, @@TRANCOUNT);
— SET NOCOUNT ON added to prevent extra result sets from
— interfering with SELECT statements.
–SET NOCOUNT ON;
— Hard code inserted data.
INSERT INTO UserInfo VALUES(‘Cris’, 1);
EXEC SPAddDataToUserInfo
INSERT INTO UserInfo VALUES(‘Ada’, 32);
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT ‘Error in [SPMultiDataToUserInfo]: ‘ + ERROR_MESSAGE();
ROLLBACK TRANSACTION
PRINT ERROR_MESSAGE();
PRINT ‘Rolled back successful Transactions: ‘ + Convert(varchar, @@TRANCOUNT);
END CATCH
END
GO

上面我们通过输出事务的计数(@@TRANCOUNT)来查看在事务回滚时,事务计数器的变化。
sqltranscation6图8 存储过程执行消息
通过上图我们发现在执行SPMultiDataToUserInfo和SPAddDataToUserInfo时,事务计数器分别加1,当遇到SPAddDataToUserInfo中的异常时,事务回滚事务计算器置零。
当执行SPMultiDataToUserInfo中的事务时,由于事务计算器(@@TRANCOUNT)已经置零,导致抛出异常,现在我们明白了导致事务计数异常的原因,所以我们在进行事务回滚之前必须判断事务计算器(@@TRANCOUNT)是否为0,如果为0就不回滚事务。

— =============================================
— Author: JKhuang
— Create date: 12/8/2011
— Description: Inserts data
— =============================================
Alter PROCEDURE SPAddDataToUserInfo
AS
BEGIN
BEGIN TRY
BEGIN TRANSACTION
PRINT ‘In [SPAddDataToUserInfo] Transactions: ‘ + Convert(varchar, @@TRANCOUNT);
— SET NOCOUNT ON added to prevent extra result sets from
— interfering with SELECT statements.
–SET NOCOUNT ON;
— Hard code inserted data.
INSERT INTO UserInfo VALUES(‘JKhuang’, 8);
INSERT INTO UserInfo VALUES(‘Jackson’, 20111111);
INSERT INTO UserInfo VALUES(‘JKRush’, 23);
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT ‘Error in [SPAddDataToUserInfo]: ‘ + ERROR_MESSAGE();
IF (@@TRANCOUNT > 0)
ROLLBACK TRANSACTION
PRINT ‘Rolled back successful in SPAddDataToUserInfo Transactions: ‘ + Convert(varchar, @@TRANCOUNT);
END CATCH
END
GO
— =============================================
— Author: JKhuang
— Create date: 12/8/2011
— Description: Invokes store procedure to insert data.
— =============================================
ALTER PROCEDURE SPMultiDataToUserInfo
相关文章 大家在看