Triggers (de nuevo) juntarlos en uno solo ?

10/03/2005 - 02:24 por Alonso | Informe spam
Tengo los siguientes 3 triggers para una tabla yconobr que actualiza campos
calculados de otra (yobra):

CREATE TRIGGER t_I_yCONOBR ON dbo.yCONOBR FOR INSERT AS
DECLARE @TOTAL numeric (14,2), @OBRA CHAR(8)
SELECT @TOTAL=TOTAL ,@OBRA=OBRA FROM INSERTED
UPDATE yOBRA SET yOBRA.ttTotalO=yOBRA.ttTotalO+@Total WHERE
yOBRA.OBRA=@OBRA


CREATE TRIGGER t_D_yCONOBR ON dbo.yCONOBR FOR DELETE AS
DECLARE @TOTAL numeric (14,2), @OBRA CHAR(8)
SELECT @TOTAL=TOTAL ,@OBRA=OBRA FROM DELETED
UPDATE yOBRA SET yOBRA.ttTotalO=yOBRA.ttTotalO-@Total WHERE
yOBRA.OBRA=@OBRA


CREATE TRIGGER t_U_yCONOBR ON dbo.yCONOBR FOR UPDATE AS
DECLARE @TOTAL numeric (14,2), @OBRA CHAR(8)
SELECT @TOTAL=TOTAL ,@OBRA=OBRA FROM DELETED
UPDATE yOBRA SET yOBRA.ttTotalO=yOBRA.ttTotalO-@Total WHERE
yOBRA.OBRA=@OBRA
SELECT @TOTAL=TOTAL ,@OBRA=OBRA FROM INSERTED
UPDATE yOBRA SET yOBRA.ttTotalO=yOBRA.ttTotalO+@Total WHERE
yOBRA.OBRA=@OBRA

Pregunto: Como puedo ponerlo todo en UN SOLO TRIGGER que sirva para
update,insert y delete al mismo tiempo?
Es posible ?
 

Leer las respuestas

#1 MAXI
10/03/2005 - 03:38 | Informe spam
Hola Alonso, antes de ponerlo en un solo trigger debo comentarte que como lo
has pensado no es la forma correcta ya que este trigger esta trabajando
registro a registro y no con un conjunto de los mismos :(

Ahora bien yo lo haria algo asi como lo siguiente (revisa el codigo porque
puede tener errores de sintaxis)

CREATE TRIGGER t_I_yCONOBR ON dbo.yCONOBR FOR INSERT,DELETE,UPDATE AS

UPDATE yOBRA SET yOBRA.ttTotalO = YOBRA.TTTOTALO + (ISNULL(I.TOTAL,0) -
ISNULL(D.TOTAL,0))
FROM YOBRA LEFT JOIN (SELECT OBRA,SUM(TOTAL) AS TOTAL GROUP BY OBRA) I
ON I.OBRA = YOBRA.OBRA
LEFT JOIN
(SELECT OBRA,SUM(TOTAL) AS TOTAL GROUP BY OBRA) D ON
YOBRA.OBRA = D.OBRA







Maxi
Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)



"Alonso" escribió en el mensaje
news:%
Tengo los siguientes 3 triggers para una tabla yconobr que actualiza
campos
calculados de otra (yobra):

CREATE TRIGGER t_I_yCONOBR ON dbo.yCONOBR FOR INSERT AS
DECLARE @TOTAL numeric (14,2), @OBRA CHAR(8)
SELECT @TOTAL=TOTAL ,@OBRA=OBRA FROM INSERTED
UPDATE yOBRA SET yOBRA.ttTotalO=yOBRA.ttTotalO+@Total WHERE
yOBRA.OBRA=@OBRA


CREATE TRIGGER t_D_yCONOBR ON dbo.yCONOBR FOR DELETE AS
DECLARE @TOTAL numeric (14,2), @OBRA CHAR(8)
SELECT @TOTAL=TOTAL ,@OBRA=OBRA FROM DELETED
UPDATE yOBRA SET yOBRA.ttTotalO= WHERE
yOBRA.OBRA=@OBRA


CREATE TRIGGER t_U_yCONOBR ON dbo.yCONOBR FOR UPDATE AS
DECLARE @TOTAL numeric (14,2), @OBRA CHAR(8)
SELECT @TOTAL=TOTAL ,@OBRA=OBRA FROM DELETED
UPDATE yOBRA SET yOBRA.ttTotalO= WHERE
yOBRA.OBRA=@OBRA
SELECT @TOTAL=TOTAL ,@OBRA=OBRA FROM INSERTED
UPDATE yOBRA SET yOBRA.ttTotalO=yOBRA.ttTotalO+@Total WHERE
yOBRA.OBRA=@OBRA

Pregunto: Como puedo ponerlo todo en UN SOLO TRIGGER que sirva para
update,insert y delete al mismo tiempo?
Es posible ?




Preguntas similares