私は 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 を使用する必要がないことを知りました。
誰でもこの問題を解決するのを手伝ってくれますか?
編集
言い忘れましたが、2番目のinsert文でエラーが発生しています。