Trigger + AFTER UPDATE
Publicado por SirSocket (13 intervenciones) el 18/08/2010 19:14:44
Buenas.
He creado un trigger para que cuando en la tabla 1 me actualizen unos campos ,lo que quiero que haga es que en otra tabla vaya a mirar si existe el registro que se acaba de actualizar.
1.-Se existe debe actualizar los campos modificados en la tabla 1
2.-No existe debe insertar el registro actualizado.
Bien parece que todo claro el problema que tengo es que no se como obtener el valor de los campos actualizados.
M' explico
Me han actualizado el campo precio,como puedo coger el valor Identificativo de la tabla1 para realizar una comparación??
*Inicio codigo trigger----------------------------------------------------------------------------
CREATE TRIGGER UpdateLinhasDoc ON LinhasDoc
AFTER UPDATE
AS
DECLARE @Exists VARCHAR
SET NOCOUNT ON
IF UPDATE(PrecUnit) or UPDATE(Quantidade)
BEGIN
SELECT @Exists = IdCabecDoc
FROM MiddleLinhasDoc
WHERE IdCabecDoc = deleted.IdCabecDoc and
NumLinha = deleted.NumLinha
IF (@Exists = 0)
INSERT INTO MiddleLinhasDoc(IdCabecDoc, NumLinha, PrecUnit, Quantidade)
SELECT IdCabecDoc, NumLinha, PrecUnit, Quantidade
FROM deleted
ELSE
UPDATE MiddleLinhasDoc
SET PrecUnit = deleted.PrecUnit,
Quantidade = deleted.Quantidade
WHERE IdCabecDoc = deleted.IdCabecDoc and
NumLinha = deleted.NumLinha
END
*fin codigo trigger----------------------------------------------------------------------------
Explico lo que hago para que se entienda todo ok
Creo un trigger para cuando se actualize la tabla linhasDoc me salte este este trigger
Compruebo si se ha actualizado alguno de los campos que me interesa
IF UPDATE(PrecUnit) or UPDATE(Quantidade)
Primer problema
SELECT @Exists = IdCabecDoc
FROM MiddleLinhasDoc
WHERE IdCabecDoc = deleted.IdCabecDoc and
NumLinha = deleted.NumLinha
en este select lo que intento hacer es mirar en una tabla intermedia ("MiddleLinhasDoc") si existe un registro con el numero de cabecera y numero de lineas igual a los actualizados (esto creo que lo debo hacer mediante la tabla (deleted, que es una tabla que guarda sql donde estan los valores anteriores a la actualizacion)) ,pues bien la expresion deleted.id....no es correcta no se puede hacer deleted punto lo que sea....como debo de hacerlo??
He creado un trigger para que cuando en la tabla 1 me actualizen unos campos ,lo que quiero que haga es que en otra tabla vaya a mirar si existe el registro que se acaba de actualizar.
1.-Se existe debe actualizar los campos modificados en la tabla 1
2.-No existe debe insertar el registro actualizado.
Bien parece que todo claro el problema que tengo es que no se como obtener el valor de los campos actualizados.
M' explico
Me han actualizado el campo precio,como puedo coger el valor Identificativo de la tabla1 para realizar una comparación??
*Inicio codigo trigger----------------------------------------------------------------------------
CREATE TRIGGER UpdateLinhasDoc ON LinhasDoc
AFTER UPDATE
AS
DECLARE @Exists VARCHAR
SET NOCOUNT ON
IF UPDATE(PrecUnit) or UPDATE(Quantidade)
BEGIN
SELECT @Exists = IdCabecDoc
FROM MiddleLinhasDoc
WHERE IdCabecDoc = deleted.IdCabecDoc and
NumLinha = deleted.NumLinha
IF (@Exists = 0)
INSERT INTO MiddleLinhasDoc(IdCabecDoc, NumLinha, PrecUnit, Quantidade)
SELECT IdCabecDoc, NumLinha, PrecUnit, Quantidade
FROM deleted
ELSE
UPDATE MiddleLinhasDoc
SET PrecUnit = deleted.PrecUnit,
Quantidade = deleted.Quantidade
WHERE IdCabecDoc = deleted.IdCabecDoc and
NumLinha = deleted.NumLinha
END
*fin codigo trigger----------------------------------------------------------------------------
Explico lo que hago para que se entienda todo ok
Creo un trigger para cuando se actualize la tabla linhasDoc me salte este este trigger
Compruebo si se ha actualizado alguno de los campos que me interesa
IF UPDATE(PrecUnit) or UPDATE(Quantidade)
Primer problema
SELECT @Exists = IdCabecDoc
FROM MiddleLinhasDoc
WHERE IdCabecDoc = deleted.IdCabecDoc and
NumLinha = deleted.NumLinha
en este select lo que intento hacer es mirar en una tabla intermedia ("MiddleLinhasDoc") si existe un registro con el numero de cabecera y numero de lineas igual a los actualizados (esto creo que lo debo hacer mediante la tabla (deleted, que es una tabla que guarda sql donde estan los valores anteriores a la actualizacion)) ,pues bien la expresion deleted.id....no es correcta no se puede hacer deleted punto lo que sea....como debo de hacerlo??
Valora esta pregunta


0