none
Verificar chave estrangeira RRS feed

  • Pergunta

  • Boa Tarde Pessoal,

    Existe algum método para verificar integridade de chave estrangeira.

    Por exemplo tenho uma tela de cadastro, e nela tem a função deletar. Porém eu não posso simplesmente deletar. Eu preciso verificar se esse registro que será deletado, está sendo utilizado em outra tabela como chave estrangeira. E somente se essa verificação for falsa eu deleto o registro.

    Além de fazer um select em todas as tabelas que utilizam a chave estrangeira desse registro. Existe outro método? 

    quinta-feira, 15 de setembro de 2011 20:50

Respostas

  • Bom dia Emmannuelle,

    Você poderá tratar erros utilizando o TRY...CATCH. Este comando implementa tratamento de erros para Transact-SQL semelhante ao tratamento de exceções nas linguagens Microsoft Visual C# e Microsoft Visual C++. Um grupo de instruções Transact-SQL pode ser incluído em um bloco TRY. Se ocorrer um erro no bloco TRY, o controle passará para outro grupo de instruções que está incluído em um bloco CATCH.

    Consulte o link para mais informações.

    Espero ter ajudado, se for o caso, marque como útil e como resposta.

    Até mais.


    Rafael Godoi Sabadin
    http://www.linkedin.com/in/rafaelgodoisabadin
    Classifique as respostas. O seu feedback é essencial.
    • Marcado como Resposta Emmannuelle terça-feira, 27 de setembro de 2011 19:20
    sexta-feira, 16 de setembro de 2011 12:23

Todas as Respostas

  • Boa tarde,

    Para verificar a estrutura de uma tabela, inclusive as chaves, utilize a procedure sp_help.

    Ex: exec sp_help tabela

    Espero ter ajudado, se for o caso, marque como útil e como resposta.

    Até mais.


    Rafael Godoi Sabadin
    http://www.linkedin.com/in/rafaelgodoisabadin
    Classifique as respostas. O seu feedback é essencial.
    quinta-feira, 15 de setembro de 2011 20:55
  • Emannuelle

    as Foreing keys ja fazem esta verificação.

    create table Tipo (idTp int not null Primary Key, nome varchar(20))
    create table Nome (idNom int identity(1,1) Primary Key, nome varchar(20), idTp int)
    go
    alter table Nome add constraint fk_tp_nome foreign key (idTp) references tipo(idTp)
    go
    
    --insere valores
    insert into tipo values (1,'Jedi'),(2,'Robo')
    go
    insert into Nome values ('C3PO',2),('YODA',1)
    go
    
    --tenta exluir registro da tabela pai (não pode pois temos um tabela que depende deste registro)
    delete from tipo where idTp = 1
    



    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    quinta-feira, 15 de setembro de 2011 20:57
  • Emannuelle,

    O Marcelo está certo, você não precisa se preocupar com isso.


    Rafael Godoi Sabadin
    http://www.linkedin.com/in/rafaelgodoisabadin
    Classifique as respostas. O seu feedback é essencial.
    quinta-feira, 15 de setembro de 2011 20:59
  • Boa noite,

    Sim eu sei que o as Foreing keys ja fazem esta verificação.

    Porém o que eu queria é identificar esse "erro" e exibir uma mensagem para o usuário. Será que tem como ?

    sexta-feira, 16 de setembro de 2011 02:33
  • Bom dia Emmannuelle,

    Você poderá tratar erros utilizando o TRY...CATCH. Este comando implementa tratamento de erros para Transact-SQL semelhante ao tratamento de exceções nas linguagens Microsoft Visual C# e Microsoft Visual C++. Um grupo de instruções Transact-SQL pode ser incluído em um bloco TRY. Se ocorrer um erro no bloco TRY, o controle passará para outro grupo de instruções que está incluído em um bloco CATCH.

    Consulte o link para mais informações.

    Espero ter ajudado, se for o caso, marque como útil e como resposta.

    Até mais.


    Rafael Godoi Sabadin
    http://www.linkedin.com/in/rafaelgodoisabadin
    Classifique as respostas. O seu feedback é essencial.
    • Marcado como Resposta Emmannuelle terça-feira, 27 de setembro de 2011 19:20
    sexta-feira, 16 de setembro de 2011 12:23