none
DELETE EM DUAS TABELAS DIFERENTES RRS feed

  • Pergunta

  • Como mostro o codigo abaixo queria fazer deletar o mesmo registro em duas tabelas diferentes mais não sei como fazer.

    DELETE [ETAPA_NIVEL_GRUPO_ITENS],[ETAPA_GRUPO_ENSINO]
    FROM [ETAPA_NIVEL_GRUPO_ITENS],[ETAPA_GRUPO_ENSINO]
    WHERE [ETAPA_NIVEL_GRUPO_ITENS].[ID_ETAPA_NIVEL_ENSINO_GRUPO]=[ETAPA_GRUPO_ENSINO].[ID_GRUPO_ENSINO]
    AND [ID_GRUPO_ENSINO]=7;


    Tancredo Almeida

    terça-feira, 24 de julho de 2012 19:02

Respostas

  • Boa Noite,

    O padrão ANSI não prevê nenhuma implementação que faça a exclusão de um registro em duas tabelas ao mesmo tempo. O SQL Server não tem uma construção desse tipo e não resta alternativas senão excluir os dados em uma tabela para depois excluir em outra (possivelmente dentro de uma transação para manter a atomicidade).

    Construções desse tipo são possíveis em MySQL e no Access (acredito eu), mas no SQL Server não é possível de fazê-lo

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    • Sugerido como Resposta Gustavo Maia Aguiar terça-feira, 24 de julho de 2012 23:37
    • Marcado como Resposta Harley Araujo quinta-feira, 26 de julho de 2012 11:53
    terça-feira, 24 de julho de 2012 23:37
  • Tancredo,

    Como o Gustavo disse, você não irá conseguir deletar das duas tabelas ao mesmo tempo. Mas você pode realizar duas deleções utilizando uma tabela temporária de auxilio.

    Estou sem SQL Server na minha máquina, mas vou tentar montar um exemplo no notepad para você ter uma ideia do que estou pensando:

    SELECT ege.ID_GRUPO_ENSINO
      INTO #Aux
      FROM ETAPA_NIVEL_GRUPO_ITENS eng
     INNER JOIN ETAPA_GRUPO_ENSINO ege
        ON ege.ID_GRUPO_ENSINO = eng.ID_ETAPA_NIVEL_ENSINO_GRUPO
     WHERE ege.ID_GRUPO_ENSINO = 7
    
    
    DELETE eng
      FROM ETAPA_NIVEL_GRUPO_ITENS eng
     INNER JOIN #Aux temp
        ON temp.ID_GRUPO_ENSINO = eng.ID_ETAPA_NIVEL_ENSINO_GRUPO
    
    
    DELETE ege
      FROM ETAPA_GRUPO_ENSINO ege
     INNER JOIN #Aux temp
        ON temp.ID_GRUPO_ENSINO = ege.ID_GRUPO_ENSINO
    

    Veja se isso é útil para você.


    []'s
    Philipe Souza
    E-mail: Philipe.s.souza@hotmail.com

    • Marcado como Resposta Harley Araujo quinta-feira, 26 de julho de 2012 11:53
    terça-feira, 24 de julho de 2012 23:45

Todas as Respostas

  • Boa Noite,

    O padrão ANSI não prevê nenhuma implementação que faça a exclusão de um registro em duas tabelas ao mesmo tempo. O SQL Server não tem uma construção desse tipo e não resta alternativas senão excluir os dados em uma tabela para depois excluir em outra (possivelmente dentro de uma transação para manter a atomicidade).

    Construções desse tipo são possíveis em MySQL e no Access (acredito eu), mas no SQL Server não é possível de fazê-lo

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    • Sugerido como Resposta Gustavo Maia Aguiar terça-feira, 24 de julho de 2012 23:37
    • Marcado como Resposta Harley Araujo quinta-feira, 26 de julho de 2012 11:53
    terça-feira, 24 de julho de 2012 23:37
  • Tancredo,

    Como o Gustavo disse, você não irá conseguir deletar das duas tabelas ao mesmo tempo. Mas você pode realizar duas deleções utilizando uma tabela temporária de auxilio.

    Estou sem SQL Server na minha máquina, mas vou tentar montar um exemplo no notepad para você ter uma ideia do que estou pensando:

    SELECT ege.ID_GRUPO_ENSINO
      INTO #Aux
      FROM ETAPA_NIVEL_GRUPO_ITENS eng
     INNER JOIN ETAPA_GRUPO_ENSINO ege
        ON ege.ID_GRUPO_ENSINO = eng.ID_ETAPA_NIVEL_ENSINO_GRUPO
     WHERE ege.ID_GRUPO_ENSINO = 7
    
    
    DELETE eng
      FROM ETAPA_NIVEL_GRUPO_ITENS eng
     INNER JOIN #Aux temp
        ON temp.ID_GRUPO_ENSINO = eng.ID_ETAPA_NIVEL_ENSINO_GRUPO
    
    
    DELETE ege
      FROM ETAPA_GRUPO_ENSINO ege
     INNER JOIN #Aux temp
        ON temp.ID_GRUPO_ENSINO = ege.ID_GRUPO_ENSINO
    

    Veja se isso é útil para você.


    []'s
    Philipe Souza
    E-mail: Philipe.s.souza@hotmail.com

    • Marcado como Resposta Harley Araujo quinta-feira, 26 de julho de 2012 11:53
    terça-feira, 24 de julho de 2012 23:45