Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Problemas con ROLLBACK TRANSACTION (https://www.clubdelphi.com/foros/showthread.php?t=75921)

Ledian_Fdez 27-09-2011 19:15:12

Problemas con ROLLBACK TRANSACTION
 
Holas chicos de este foro, pues aca necesito una manito con este procedimiento almacenado.

Este de aqui me pincha sin problema.

Código SQL [-]
Create      procedure Actualiza_Trabajador
@IDTrabajador BIGINT,
@IDOficina BIGINT,
@Nombre VARCHAR(50),
@Apellidos VARCHAR(50),
@CI VARCHAR(11),
@Sexo VARCHAR(1),
@Identity BIGINT output,  -- Para devolver el ID

AS

if not exists(select CI from Trabajador where CI= @CI)
     begin   
      INSERT INTO Trabajador( IDOficina, Nombre, Apellidos, CI, Sexo)
      VALUES (@IDOficina, @Nombre, @Apellidos, @CI, @Sexo)

      SET @Identity = SCOPE_IDENTITY() 
     end
else 
     BEGIN
      RAISERROR ('No se admiten Trabajadores repetido. Verifique el número de CI.', 16, 1)
     END



En este llamo al procedimiento anterior y actualizo la tabla trámite diario solo si no hubo ningun error (es desir que se halla insertado correctamente los datos, fijense que verifico para que no hallan Trabajadores repetido), solo que aunque no se inserte en la tabla Trabajador aun disparandose el RAISERROR me inserta en la tabla trámite diario y pense que con el ROLLBACK TRANSACTION evitaría eso.

Código SQL [-]
CREATE     PROCEDURE ActualizaAlta

-- Parámetros de Trabajador
@IDTrabajador BIGINT,
@IDOficina BIGINT,
@Nombre VARCHAR(50),
@Apellidos VARCHAR(50),
@CI VARCHAR(11),
@Sexo VARCHAR(1),
@Identity BIGINT output,  -- Para devolver el ID

-- Parámetros de trámite diario
@IDTramite BIGINT,
@IDUsuario BIGINT,
@IDEmpresa BIGINT,
@Fecha SMALLDATETIME,

AS

SET @Identity = -1

BEGIN TRANSACTION

--Actualizamos tabla Consumidor
EXEC Actualiza_Trabajador @IDTrabajador, @IDOficina, @Nombre, @Apellidos, @CI, @Sexo, @Identity OUTPUT

--Actualizamos tabla TramiteDiario
DECLARE @HOY DATETIME
SET @HOY = GETDATE()

INSERT INTO TramiteDiario (IDTrabajador,  IDEmpresa,  IDUsuario,  Fecha) 
VALUES                   (@Identity, @IDEmpresa, @IDUsuario, @HOY)

if @@error <> 0 
   BEGIN
     ROLLBACK TRANSACTION
   END
   
else COMMIT TRANSACTION

En espera de su ayuda,
Y como simepre mil gracias de antemano,
Lo salu2

mightydragonlor 27-09-2011 19:58:39

Puedes usar TRY o en vez de usar RAISE EXCEPTION usar una variable de salida que especifique si hubo o no error y capturarlo desde el SP Padre.


La franja horaria es GMT +2. Ahora son las 00:21:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi