Ver Mensaje Individual
  #1  
Antiguo 27-09-2011
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Reputación: 18
Ledian_Fdez Va por buen camino
Post 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
Responder Con Cita