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