usar update try transaction tiene stored solicitud manejo errores ejemplos correspondiente como catch begin sql transactions

update - transaction sql server stored procedure



La solicitud ROLLBACK TRANSACTION no tiene el correspondiente error BEGIN TRANSACTION en el servidor sql (4)

Recibo el error "La solicitud de ROLLBACK TRANSACTION no tiene una TRANSICIÓN BEGIN correspondiente". Estoy intentando deshacer la transacción si el recuento de filas para cualquier declaración de eliminación es cero. A continuación se encuentra mi código. ¿Qué estoy haciendo mal? Por favor ayuda

alter procedure delete_staff(@staffID varchar(10)) as declare @tempvar varchar(50), @staffName varchar(50), @jobTitle varchar(50), @dept varchar(50) begin transaction trans1 declare @rc1 int declare @rc2 int declare @rc3 int select @tempvar = left(@staffID,1) from Staff delete from staff where staffID = @staffID set @rc1=@@rowcount delete from Login where userID = @staffID set @rc2=@@rowcount begin if(@tempvar=''S'') begin delete from Specialist where specialistID = @staffID set @rc3=@@rowcount end else if(@tempvar=''H'') begin delete from Helpdesk_Operator where helpdesk_OperatorID = @staffID set @rc3=@@rowcount end commit transaction trans1 end if(@rc1=0 or @rc2=0 or @rc3=0) begin rollback transaction trans1 end


Creo que la commit transaction trans1 siempre recibe un golpe, por lo tanto, no podrá deshacer desde ese punto.


Si compromete la transacción, no puede realizar una reversión. Haz uno o el otro:

if(@rc1=0 or @rc2=0 or @rc3=0) begin rollback transaction trans1 end else begin commit transaction trans1 end


Usted ha commit transaction trans1 justo antes de su declaración if para la reversión. La transacción siempre se confirmará antes de verificar los recuentos.


Esto sucede si su transacción ya ha sido confirmada antes de ingresar a su declaración de compromiso. Puede dar una condición ''If (@@ TRANCOUNT> 0)'' antes de su declaración ''COMPRAR TRANSACCIÓN''.

Por ejemplo:

BEGIN TRANSACTION SELECT 0--Statements To Excecute ROLLBACK IF(@@TRANCOUNT>0) COMMIT TRANSACTION

O

BEGIN TRY BEGIN TRANSACTION SELECT 0 --Statements To Excecute COMMIT TRANSACTION END TRY BEGIN CATCH IF(@@TRANCOUNT>0) ROLLBACK END CATCH