我正在使用 SQL Server 2012,并编写了一个带有回滚事务的小型存储过程。我的程序如下:
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 进行回滚。
谁能帮我解决这个问题。
编辑
对不起,我忘了提到,第二个插入语句中出现错误。