gpt4 book ai didi

transactions - 如果@@Trancount > 0 不起作用

转载 作者:行者123 更新时间:2023-12-04 14:31:55 28 4
gpt4 key购买 nike

我正在使用 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 来回滚。

谁能帮我解决这个问题。

编辑

抱歉,我忘了提及,第二个插入语句中出现错误。

最佳答案

您已经启动了一个隐式事务。要回滚它,您需要启动一个显式事务(BEGIN TRANSACTION)

ALTER PROCEDURE [dbo].[uspInsertEmployee] 
@EmpId int,
@EmployeeName varchar(50),
@DeptId int
AS

BEGIN

BEGIN TRY
BEGIN TRAN
insert into Departments values (@DeptId, 'Testing 1');
insert into Employees values (@EmpId, @EmployeeName, @DeptId);
COMMIT TRAN
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

关于transactions - 如果@@Trancount > 0 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11518267/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com