none
Loop na Trigger RRS feed

  • Pergunta

  • Boa tarde Pessoal.
    Preciso de uma orientação no seguinte cenário: Meu sistema gerencia 2 empresas, e o cadastro de produto é individual para as duas. Porém a ordem é que o cadastro de produto seja único. Com isso preferi utilizar uma Trigger na tabela para realizar essa "Duplicação", ou seja, se eu inserir na empresa A o produto 999999 também será inserido na empresa B.

    Exemplo:

    TB_PRODUTO
    #cod_empresa
    #cod_produto
    des_produto

    EMPRESA    PRODUTO    DESCRICAO
    A               999999        PAPEL               --> registro incluído pela tela do sistema
    B               999999        PAPEL               --> replicado

    Criei a trigger da seguinte forma, ela vai ficar inserindo como um loop e da violação de chave.

    Alguém pode me orientar em corrigir ou criar de outra forma?

    CREATETRIGGERDUPLICA_PRODUTO ONTB_PRODUTO

    AFTERINSERT

    AS

    BEGIN

      DECLARE@COD_EMP INT;

      SELECT@COD_EMP =cod_empresa FROMinserted

      IF (@COD_EMP =200)

        BEGIN

            SET@COD_EMP =100

        END;

      IF (@COD_EMP =100)

        BEGIN

            SET@COD_EMP =200

        END;

     

       InsertintoTB_PRODUTO(cod_empresa,cod_produto,des_produto)

       SELECT@COD_EMP,cod_produto,des_produto

       FROMinserted

    END;


    --- André Abreu

    quarta-feira, 28 de outubro de 2015 20:05

Respostas

  • Boa noite,

    Experimente dessa forma:

    CREATETRIGGERDUPLICA_PRODUTO ONTB_PRODUTO
    
    AFTERINSERT
    
    AS
    
    BEGIN
    
       Insert into TB_PRODUTO (cod_empresa, cod_produto, des_produto)
           SELECT
               case when cod_empresa = 100 then 200 else 100 end,
               cod_produto,
               des_produto
           FROM inserted
    
    END;

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Marcos SJ quinta-feira, 29 de outubro de 2015 11:42
    quarta-feira, 28 de outubro de 2015 22:19

Todas as Respostas

  • Boa noite,

    Experimente dessa forma:

    CREATETRIGGERDUPLICA_PRODUTO ONTB_PRODUTO
    
    AFTERINSERT
    
    AS
    
    BEGIN
    
       Insert into TB_PRODUTO (cod_empresa, cod_produto, des_produto)
           SELECT
               case when cod_empresa = 100 then 200 else 100 end,
               cod_produto,
               des_produto
           FROM inserted
    
    END;

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Marcos SJ quinta-feira, 29 de outubro de 2015 11:42
    quarta-feira, 28 de outubro de 2015 22:19
  • Valeu Gapimex, sua solução resolveu meu cenário.

    Obrigado.


    --- André Abreu

    quinta-feira, 29 de outubro de 2015 11:53