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