Tôi đang sử dụng SQL Server 2012 và tôi đã viết một quy trình được lưu trữ nhỏ với giao dịch rollback. thủ tục của tôi là như sau:nếu @@ Trancount> 0 không hoạt động
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
Như bạn có thể thấy, trong điều kiện Nếu, khi @@ trancount> 0, tôi đang cố gắng để rollback giao dịch, nhưng khi tôi thực hiện các thủ tục, báo cáo kết quả rollback là không bao giờ được thực thi, tôi đã gỡ rối quy trình và giá trị của @@ TRANCOUNT là 1. Nhưng tôi vẫn không hiểu tại sao nó không hoạt động. Và tôi đã biết rằng chúng ta không cần sử dụng tran bắt đầu và kết thúc cho rollback.
Bất kỳ ai cũng có thể giúp tôi giải quyết vấn đề này.
EDIT
Xin lỗi tôi quên đề cập đến đó, một lỗi xảy ra trong báo cáo chèn thứ hai.
bạn muốn nói rằng không có giao dịch rõ ràng, @@ giá trị trancount sẽ luôn là số không? nhưng tôi trong khi gỡ lỗi, tôi thấy @@ trancount giá trị như 1. nhưng im không sử dụng bất kỳ tran bắt đầu và cam tran. – Harsha
Đây là một giao dịch Autocommit và không ngầm, trừ khi SET IMPLICIT_TRANSACTION ON, hoặc SET ANSI DEFAULTS ON, mặc dù câu trả lời là chính xác. –