none
DELETE com dependendicias de tabelas RRS feed

  • Pergunta

  • Pessoal bom dia e help-me

    Como faço para deletar uma informação que tem dependências de outra tabale e nessa outra não posso excluir nenhuma info,

    rodei esse delete :

    -- Remover o departamento duplicado não usado --
    DELETE DEPARTAMENTO WHERE Departamento = 1955;

    e gerou esse retorno 

    Mensagem 547, Nível 16, Estado 0, Linha 5
    The DELETE statement conflicted with the REFERENCE constraint "FK_COMPRA_DEPARTAMENTO_DEPARTAMENTO". The conflict occurred in database "WBC_PE_INTEGRADO", table "dbo.COMPRA_DEPARTAMENTO", column 'Departamento'.
    The statement has been terminated.

    sendo que nao posso excluir nada da outra tabela  table "dbo.COMPRA_DEPARTAMENTO"

    quarta-feira, 23 de março de 2022 15:07

Respostas

  • DR. Khan,

          Pelo visto a informação que você quer deletar tem um relacionamento de chave primária (PK - Primary Key)  para a tabela que você NÃO pode deletar nada de chave estrangeira (FK - Foreign Key). Se você fizer isso irá gerar algo muito ruim chamado de "registros órfãos".

          1 - Uma forma é você indo na tabela que NÃO pode deletar nada e mudar o código de relacionamento.

          Exemplo:

          O registro (departamento) que você quer apagar tem ID (PK) de número "1955". Vá na tabela que você NÃO pode apagar nada e procure todos o campo ID (FK) "1955" e modifique para outro código (ID) de relacionamento que você achar conveniente (outro departamento).

          Quando o registro que você quer apagar NÃO tiver mais nenhum código (1955) relacionado com a tabela que você NÃO pode apagar, o sistema deixará você apagar.

          2 - Outra forma é você apagando o relacionamento entre tabelas e depois apagando o registro (Departamento=1955)... Isso é muito ruim, pois você NÃO poderá relacionar as tabelas novamente porque as chaves PK e FK NÃO irão bater em todos os registros de todas as tabelas e fatalmente será gerado "registros órfãos 1955 na tabela que você NÃO pode apagar"... isso é uma péssima....

    []'s,
    Fabio I.

    • Editado Fabio I quinta-feira, 24 de março de 2022 10:29
    • Sugerido como Resposta Reginaldo Villela quarta-feira, 20 de abril de 2022 02:51
    • Marcado como Resposta dr.khan quarta-feira, 18 de maio de 2022 21:23
    quarta-feira, 23 de março de 2022 16:11
  • Olá,

    seu problema é mais de negócio do que técnico, pois para deletar registros numa estrutura de pai e filho, é só ir na tabela dependente (filha) e remover os registro que tem referência a tabela pai. E pois apagar o registro na tabela pai.

    Mas como você disse "...não posso excluir nenhuma info.", você primeiro precisa ajustar os registros filhos para depois apagar o registro pai.

    Espero que isso te ajude.

    Abrs.


    Reginaldo Villela

    • Sugerido como Resposta Reginaldo Villela quarta-feira, 20 de abril de 2022 02:52
    • Marcado como Resposta dr.khan quarta-feira, 18 de maio de 2022 21:23
    sexta-feira, 8 de abril de 2022 02:53
  • Olá

     

    Alguma novidade sobre sua consulta?

     

    A resposta foi dada pelo Fabio?

     

    Obrigado por utilizar os fóruns MSDN.

     ____________________________

     

    Lembre-se de "Marcar como Respostas" respostas que resolveram seu problema, é uma forma comum de reconhecer aqueles que ajudaram, e torna mais fácil para os outros visitantes encontrar a solução mais tarde.

     

    Se você tiver algum elogio ou reclamação sobre o suporte MSDN, sinta-se à vontade para contatar MSDNFSF@microsoft.com.


    Jeremy Arias

    • Marcado como Resposta dr.khan quarta-feira, 18 de maio de 2022 21:23
    quarta-feira, 23 de março de 2022 21:09

Todas as Respostas

  • DR. Khan,

          Pelo visto a informação que você quer deletar tem um relacionamento de chave primária (PK - Primary Key)  para a tabela que você NÃO pode deletar nada de chave estrangeira (FK - Foreign Key). Se você fizer isso irá gerar algo muito ruim chamado de "registros órfãos".

          1 - Uma forma é você indo na tabela que NÃO pode deletar nada e mudar o código de relacionamento.

          Exemplo:

          O registro (departamento) que você quer apagar tem ID (PK) de número "1955". Vá na tabela que você NÃO pode apagar nada e procure todos o campo ID (FK) "1955" e modifique para outro código (ID) de relacionamento que você achar conveniente (outro departamento).

          Quando o registro que você quer apagar NÃO tiver mais nenhum código (1955) relacionado com a tabela que você NÃO pode apagar, o sistema deixará você apagar.

          2 - Outra forma é você apagando o relacionamento entre tabelas e depois apagando o registro (Departamento=1955)... Isso é muito ruim, pois você NÃO poderá relacionar as tabelas novamente porque as chaves PK e FK NÃO irão bater em todos os registros de todas as tabelas e fatalmente será gerado "registros órfãos 1955 na tabela que você NÃO pode apagar"... isso é uma péssima....

    []'s,
    Fabio I.

    • Editado Fabio I quinta-feira, 24 de março de 2022 10:29
    • Sugerido como Resposta Reginaldo Villela quarta-feira, 20 de abril de 2022 02:51
    • Marcado como Resposta dr.khan quarta-feira, 18 de maio de 2022 21:23
    quarta-feira, 23 de março de 2022 16:11
  • Olá

     

    Alguma novidade sobre sua consulta?

     

    A resposta foi dada pelo Fabio?

     

    Obrigado por utilizar os fóruns MSDN.

     ____________________________

     

    Lembre-se de "Marcar como Respostas" respostas que resolveram seu problema, é uma forma comum de reconhecer aqueles que ajudaram, e torna mais fácil para os outros visitantes encontrar a solução mais tarde.

     

    Se você tiver algum elogio ou reclamação sobre o suporte MSDN, sinta-se à vontade para contatar MSDNFSF@microsoft.com.


    Jeremy Arias

    • Marcado como Resposta dr.khan quarta-feira, 18 de maio de 2022 21:23
    quarta-feira, 23 de março de 2022 21:09
  • Bem que eu gostaria de chegar aos 10 mil pontos...
    quinta-feira, 24 de março de 2022 10:30
  • Dr. Khan,

    As observações e sugestões do Fabio são importantes!

    Talvez você possa utilizar o comando Alter Table desativando temporariamente o relacionamento e depois ativando novamente.

    Veja o exemplo:

    -- Desabilitando --
    ALTER TABLE Departamento NOCHECK CONSTRAINT FK_Departamento_Compras
    Go
     
    
    -- Habilitando --
    ALTER TABLE Departamento CHECK CONSTRAINT FK_Departamento_Compras
    Go

    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 24 de março de 2022 23:19
    Moderador
  • Olá,

    seu problema é mais de negócio do que técnico, pois para deletar registros numa estrutura de pai e filho, é só ir na tabela dependente (filha) e remover os registro que tem referência a tabela pai. E pois apagar o registro na tabela pai.

    Mas como você disse "...não posso excluir nenhuma info.", você primeiro precisa ajustar os registros filhos para depois apagar o registro pai.

    Espero que isso te ajude.

    Abrs.


    Reginaldo Villela

    • Sugerido como Resposta Reginaldo Villela quarta-feira, 20 de abril de 2022 02:52
    • Marcado como Resposta dr.khan quarta-feira, 18 de maio de 2022 21:23
    sexta-feira, 8 de abril de 2022 02:53