none
Update Cascade em auto relacionamento RRS feed

  • Pergunta

  • Uso o sql 2005 e tenho uma tabela que tem auto-relacionamento. a tabela é mais ou menos a seguinte (com campos suprimidos):

    Tabela PRODUTO
    cod_prod (PK)
    nom_prod
    cod_prod_sub (este campo é FK do cod_prod da mesma tabela)

    Vou ter situações onde eu preciso atualizar o campo do produto e por consequencia os cod_prod_sub iguais a ele.
    Não consigo colocar um update cascade pois dá redundancia cíclica.
    Tentei fazer uma trigger no update mas não deu certo, neste caso não sei se não dá ou eu que fiz algo de errado.

    Tem como resolver isso?
    • Movido Gustavo Maia Aguiar quarta-feira, 30 de setembro de 2009 22:26 (De:SQL Server - Desenvolvimento Geral)
    terça-feira, 29 de setembro de 2009 19:21

Respostas

  • Danyboy,

         O SQL server permite triggers aninhadas até 32 níveis, mas na instalação default do SQL não permite triggers recursivas (uma tabela dispara uma trigger, que altera dados na mesma tabela, que dispara a trigger novamente). Para que você altere isso, terá que digitar o comando:

         ALTER DATABASE <suabase>
          SET RECURSIVE_TRIGGERS ON

        Entretanto, antes de você fazer isso (recomendo que não faça porque você terá que controlar cada nível da trigger e como ela se comportará) eu recomendo que você dê uma olhada no books Online sobre Recursive Triggers.

    MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008
    • Marcado como Resposta DanyBoy quarta-feira, 30 de setembro de 2009 16:26
    terça-feira, 29 de setembro de 2009 20:49
    Moderador

Todas as Respostas

  • Dany,

    Você esta utilizando recursividade de tabela!!!
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 29 de setembro de 2009 19:50
  • Oi Júnior,

    não sei se este é o termo utilizado, mas parece que sim, é recursividade.
    A FK da tabela aponta pra PK na mesma tabela.
    terça-feira, 29 de setembro de 2009 20:16
  • Danyboy,

         O SQL server permite triggers aninhadas até 32 níveis, mas na instalação default do SQL não permite triggers recursivas (uma tabela dispara uma trigger, que altera dados na mesma tabela, que dispara a trigger novamente). Para que você altere isso, terá que digitar o comando:

         ALTER DATABASE <suabase>
          SET RECURSIVE_TRIGGERS ON

        Entretanto, antes de você fazer isso (recomendo que não faça porque você terá que controlar cada nível da trigger e como ela se comportará) eu recomendo que você dê uma olhada no books Online sobre Recursive Triggers.

    MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008
    • Marcado como Resposta DanyBoy quarta-feira, 30 de setembro de 2009 16:26
    terça-feira, 29 de setembro de 2009 20:49
    Moderador