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 ?

Preguntas similare

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 ?




Respuesta Responder a este mensaje
#2 Alonso
10/03/2005 - 03:52 | 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 :(




Gracias nuevamente pero... podrias explicarme un poco eso ?
La idea de estos triggers es mantener actualizados unos totales en una tabla
a medida que se van insertando, actualizando o borrando registros. O no ?
Los registros van registro a registro (no veo otra manera).
Respuesta Responder a este mensaje
#3 qwalgrande
10/03/2005 - 11:07 | Informe spam
Hola.

Los trigger saltan con cada sentencia que les afecta, no para cada registro
afectado. Por ejemplo, si realizas un update que afecte a 20 registros, el
trigger salta una vez. En tu trigger debes contemplar que venga más de un
registro, es decir, que en las tablas INSERTED y DELETED puede haber un
registro o muchos.

qwalgrande


"Alonso" wrote in message
news:
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 :(




Gracias nuevamente pero... podrias explicarme un poco eso ?
La idea de estos triggers es mantener actualizados unos totales en una tabla
a medida que se van insertando, actualizando o borrando registros. O no ?
Los registros van registro a registro (no veo otra manera).
Respuesta Responder a este mensaje
#4 Danilsa
11/03/2005 - 03:44 | Informe spam

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





No deberia haber una referencia a las tablas Inserted y Deleted en esa
instruccion ?
Respuesta Responder a este mensaje
#5 Maxi
11/03/2005 - 13:08 | Informe spam
Hola, tienes toda la razon del mundo, se me ha pasado :(


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 FROM INSERTED GROUP
BY OBRA) I
ON I.OBRA = YOBRA.OBRA
LEFT JOIN
(SELECT OBRA,SUM(TOTAL) AS TOTAL FROM DELETED GROUP BY OBRA) D ON
YOBRA.OBRA = D.OBRA



Salu2
Maxi


"Danilsa" escribió en el mensaje
news:
>
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





No deberia haber una referencia a las tablas Inserted y Deleted en esa
instruccion ?


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida