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

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
-


modificados de
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')

-


de la copia de
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')


-


package DTS
-
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



.

Preguntas similares