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