5
我正在使用SQL Server 2012,並且使用回滾事務編寫了一個小型存儲過程。我的程序如下:如果@@ Trancount> 0不起作用
ALTER PROCEDURE [dbo].[uspInsertEmployee]
@EmpId int,
@EmployeeName varchar(50),
@DeptId int
AS
BEGIN
BEGIN TRY
insert into Departments values (@DeptId, 'Testing 1');
insert into Employees values (@EmpId, @EmployeeName, @DeptId);
END TRY
BEGIN CATCH
--log error here
Goto Error_Rollback
END CATCH
Error_Rollback:
IF @@TRANCOUNT > 0
BEGIN
print 'rolling back transaction' /* <- this is never printed */
ROLLBACK TRAN
END
END
正如你所看到的,在If條件,@@ TRANCOUNT> 0時,我試圖回滾事務,但是當我執行的程序,回滾語句從未執行過,我已經調試過程並且@@ TRANCOUNT的值是1.但我仍然不明白爲什麼它不起作用。而且我知道我們不需要使用begin tran和end tran來回滾。
任何人都可以幫助我解決這個問題。
編輯
對不起,我忘了提及的是,在第二個INSERT語句中出現錯誤。
您的意思是說,沒有明確的交易,@@ trancount價值將永遠是零禮儀?但我在調試時,我看到@@ trancount的值爲1,但我沒有使用任何開始tran和commit tran。 – Harsha 2012-07-17 08:57:57
這是一個自動提交事務,不是隱式事務,除非SET IMPLICIT_TRANSACTION ON或SET ANSI DEFAULTS ON,儘管答案是正確的。 – 2014-07-08 10:36:40