Bom dia, fiz esse curso no ano passado e agora estou usando meus conhecimentos no trabalho, no entanto estou enfrentando uma dificuldade.
No Firebird eu costumava utilizar as triggers para gatilhos com exception, estou tentando fazer algo similar no SQL Server com o 'if', porém não estou tendo sucesso. Segue o código:
CREATE TRIGGER dif_sngpc ON EST_PROD_EST_SNGPC_LOTE_CPL
FOR UPDATE
AS
BEGIN TRANSACTION
SELECT EST_NF_ENT_IT_EST_PROD_CPL_LOTE.CD_LOTE, EST_NF_ENT_IT_EST_PROD_CPL_LOTE.QTDE_PROD, EST_PROD_CPL_LOTE.NR_LOTE,
EST_PROD_CPL_LOTE.DT_VALID, EST_PROD_CPL_LOTE.CD_PROD, EST_NF_ENT_IT_EST_PROD_CPL_LOTE.ST_CONF, EST_PROD_CPL_LOTE.DT_FABR
FROM EST_NF_ENT_IT_EST_PROD_CPL_LOTE
INNER JOIN EST_PROD_CPL_LOTE ON EST_NF_ENT_IT_EST_PROD_CPL_LOTE.CD_EMP = EST_PROD_CPL_LOTE.CD_EMP
AND EST_NF_ENT_IT_EST_PROD_CPL_LOTE.CD_FILIAL = EST_PROD_CPL_LOTE.CD_FILIAL
AND EST_NF_ENT_IT_EST_PROD_CPL_LOTE.CD_LOTE = EST_PROD_CPL_LOTE.CD_LOTE
WHERE EST_NF_ENT_IT_EST_PROD_CPL_LOTE.CD_EMP =1 AND EST_NF_ENT_IT_EST_PROD_CPL_LOTE.CD_FILIAL =3
AND EST_NF_ENT_IT_EST_PROD_CPL_LOTE.CD_NF = 7194
AND EST_NF_ENT_IT_EST_PROD_CPL_LOTE.CD_PROD = 21650
SELECT * FROM EST_SNGPC_ENTRADA A
INNER JOIN EST_PROD_EST_SNGPC_LOTE B ON (A.CD_LOTE = B.CD_LOTE) AND (A.CD_PROD = B.CD_PROD)
WHERE CD_FILIAL = 3 and CD_NF = 7194 AND A.CD_LOTE = 15315 AND B.CD_LOTE = 15315
BEGIN
IF EST_PROD_CPL_LOTE.NR_LOTE <> EST_PROD_EST_SNGPC_LOTE.NR_LOTE
AND EST_PROD_CPL_LOTE.DT_VALID <> EST_PROD_EST_SNGPC_LOTE.VALIDADE
BEGIN
ALTER TABLE EST_PROD_EST_SNGPC_LOTE_CPL DISABLE TRIGGER dif_sngpc
END
ALTER TABLE EST_PROD_EST_SNGPC_LOTE_CPL ENABLE TRIGGER dif_sngpc
END
Será que seria recomendado utilizar uma procedure ao invés de uma trigger no SQL Server. Alguém consegue dar uma ideia?
Att Luís Eduardo Fornari