Pregunta Triggers

30/11/2004 - 19:03 por Richard Padilla | Informe spam
Hola as todos

tengo tres trigger

TRIGGER TGGPSPCPINSERT
TRIGGER TGGPSPCPUPDATE
TRIGGER TGGPSPCPDELETE

Por cada sentencia SQL el trigger hace diferentes cosas, la pregunta es la
siguiente: ¿ puedo yo unificar los 3 triggers en uno solo y ponerle algo así
como un CASE para el INSERT, un Case para el UPDATE y un CASE para el
DELETE.

Me pueden colaborar con algun ejemplo por favor?



CREATE TRIGGER TGGPSPCPINSERT
ON IV00101
FOR INSERT
AS
-
-
If @@Rowcount = 0
Return
-
alguna manera
-
IF UPDATE (ITEMNMBR) OR UPDATE (ITEMDESC)
BEGIN

IF ((SELECT ITMCLSCD FROM Inserted) = '1_MP FORRO') OR ((SELECT ITMCLSCD
FROM Inserted) = '1_MP TELAS') OR
((SELECT ITMCLSCD FROM Inserted) = '4_INS. FAB') OR ((SELECT ITMCLSCD
FROM Inserted) = '4_INS. TER')

BEGIN
-
-

INSERT INTO TBLTEMPORALGPSPCP (CODI_MATE_GRUPO, CODI_MATE_SUBGRUPO,
CODI_UNID_MEDI_PLAN,
CODI_UNID_MEDIDA, CODI_MATE_REFERENCIA, NOMB_MATE_REFERENCIA,
TIPO_MOVIMIENTO)
SELECT SUBSTRING(Ins.ITEMNMBR, 1, 2) AS CODI_MATE_GRUPO,
SUBSTRING(Ins.ITEMNMBR, 3, 2) AS CODI_MATE_SUBGRUPO,
B.UOMSCHDL AS CODI_UNID_MEDI_PLAN, C.UOFM AS CODI_UNID_MEDIDA,
Ins.ITEMNMBR AS CODI_MATE_REFERENCIA,
Ins.ITEMDESC AS NOMB_MATE_REFERENCIA, '0' AS TIPO_MOVIMIENTO
FROM Inserted Ins INNER JOIN IV40201 B
ON Ins.UOMSCHDL = B.UOMSCHDL INNER JOIN IV40202 C ON
Ins.UOMSCHDL = C.UOMSCHDL INNER JOIN
IV40400 D ON Ins.ITMCLSCD = D.ITMCLSCD
WHERE (D.ITMCLSCD = '1_MP FORRO') OR (D.ITMCLSCD = '1_MP TELAS') OR
(D.ITMCLSCD = '4_INS. FAB') OR (D.ITMCLSCD = '4_INS.
TER')

-
datos
-

INSERT INTO TBLAUDITORIAGPSPCP (CODI_MATE_GRUPO, CODI_MATE_SUBGRUPO,
CODI_UNID_MEDI_PLAN,
CODI_UNID_MEDIDA, CODI_MATE_REFERENCIA, NOMB_MATE_REFERENCIA, ITMCLSCD,
ITMCLSDC, TIPO_MOVIMIENTO, ESTADO, FECHA)
SELECT SUBSTRING(Ins.ITEMNMBR, 1, 2) AS
CODI_MATE_GRUPO,SUBSTRING(Ins.ITEMNMBR, 3, 2)
AS CODI_MATE_SUBGRUPO, B.UOMSCHDL AS CODI_UNID_MEDI_PLAN, C.UOFM AS
CODI_UNID_MEDIDA, Ins.ITEMNMBR AS CODI_MATE_REFERENCIA, Ins.ITEMDESC AS
NOMB_MATE_REFERENCIA, D.ITMCLSCD, D.ITMCLSDC, 'INSERSIÓN' AS
TIPO_MOVIMIENTO, 'COPIADO'
AS ESTADO, GETDATE() AS FECHA
FROM Inserted Ins INNER JOIN IV40201 B
ON Ins.UOMSCHDL = B.UOMSCHDL INNER JOIN IV40202 C ON
Ins.UOMSCHDL = C.UOMSCHDL INNER JOIN
IV40400 D ON Ins.ITMCLSCD = D.ITMCLSCD
WHERE (D.ITMCLSCD = '1_MP FORRO') OR (D.ITMCLSCD = '1_MP TELAS') OR
(D.ITMCLSCD = '4_INS. FAB') OR (D.ITMCLSCD = '4_INS.
TER')


-
-
IF ((SELECT ITMCLSCD FROM Inserted) = '1_MP FORRO') OR ((SELECT ITMCLSCD
FROM Inserted) = '1_MP TELAS')
BEGIN
EXEC msdb.dbo.sp_start_job @job_name = 'JOBGPSPCPMATERIASPRIMAS'
END

IF ((SELECT ITMCLSCD FROM Inserted) = '4_INS. FAB') OR ((SELECT ITMCLSCD
FROM Inserted) = '4_INS. TER')
BEGIN
EXEC msdb.dbo.sp_start_job @job_name = 'JOBGPSPCPINSUMOS'
END

END

END

GO
 

Leer las respuestas

#1 ulises
30/11/2004 - 20:23 | Informe spam
Si como mencionas los tres triggers hacen cosas diferentes
no veo ganancia en juntarlos, lo único que lograrías es
volver el código menos legible.

Saludos,
Ulises

Mostrar la cita
la pregunta es la
Mostrar la cita
y ponerle algo así
Mostrar la cita
CASE para el
Mostrar la cita
modificados de
Mostrar la cita
((SELECT ITMCLSCD
Mostrar la cita
((SELECT ITMCLSCD
Mostrar la cita
CODI_MATE_SUBGRUPO,
Mostrar la cita
NOMB_MATE_REFERENCIA,
Mostrar la cita
CODI_UNID_MEDIDA,
Mostrar la cita
(D.ITMCLSCD = '4_INS.
Mostrar la cita
de la copia de
Mostrar la cita
CODI_MATE_SUBGRUPO,
Mostrar la cita
NOMB_MATE_REFERENCIA, ITMCLSCD,
Mostrar la cita
CODI_UNID_MEDI_PLAN, C.UOFM AS
Mostrar la cita
Ins.ITEMDESC AS
Mostrar la cita
'INSERSIÓN' AS
Mostrar la cita
(D.ITMCLSCD = '4_INS.
Mostrar la cita
package DTS
Mostrar la cita
((SELECT ITMCLSCD
Mostrar la cita
((SELECT ITMCLSCD
Mostrar la cita

Preguntas similares