1
resposta

TRIGGER COM IF

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

1 resposta

Oi, Luís! Tudo bem?

Perdão por demorar a te dar um retorno.

No caso que você citou, um trigger parece ser a opção mais recomendada. Elas são automáticas e para não acontecer uma dependência maior no banco de dados (ou seja, para não ter que fazer manualmente toda vez que precisar executar uma ordem de ações), é uma escolha interessante. Já uma stored procedure acontece ao ser chamada por um comando específico.

Contudo, sem um contexto completo do que está ocorrendo, consigo apenas dar uma ideia inicial. Espero que ajude e já seja um passo inicial para o problema.

Se outra dúvida surgir, estamos à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.