none
Excluir tabela com Chave estrangeira RRS feed

  • Pergunta

  • Boa noite estou tentando deletar uma tabela, mas não da porque ela tem chaves estrangeiras, preciso deletar essa tabela.

    create table Produto
    (
        pro_cod int primary key identity,
        tp_cod int not null,
        sp_cod int not null,
        pro_nome varchar(50) not null,   
        pro_descricao varchar(50) not null,
        pro_status float not null,   
        foreign key(tp_cod) references TipoProduto(tp_cod),
        foreign key(sp_cod) references SubProduto(sp_cod)
    )

     

    Alguem sabe como fazer isso. Obrigado

    quarta-feira, 4 de agosto de 2010 00:43

Respostas

  • Abrão,

    em complemento ao amico erickson o script abaixo vai te ajudar e descobrir as dependencias da dabela que vc quer excluir, ai vc exclui as dependencias listadas no resutlado do script

    EXEC sp_helpconstraint 'sua_tabela','nomsg'
    
    

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba
    • Marcado como Resposta Abrão quinta-feira, 5 de agosto de 2010 14:44
    quinta-feira, 5 de agosto de 2010 12:44

Todas as Respostas

  • Abrão,

    Você tentou dropar as constraints (foreign keys) desta tabela antes de apagá-la?

    Para isto, você utiliza o comando ALTER TABLE Produto DROP CONSTRAINT <nome_da_constraint>, que no seu caso, pelo que entendi, as duas constraints são tp_cod e sp_cod, certo?

    Após dropar estas constraints você poderá apagar a tabela.

     

    Att.


    Erickson Ricci - MCP, MCTS, MCTS BI
    quarta-feira, 4 de agosto de 2010 02:58
  • Erickson.

    Sou muito iniciante na area se tiver como voce ser mais especifico, com o exemplo, agradeceria muito.

     

    Obrigado

    quarta-feira, 4 de agosto de 2010 22:29
  •  

    Abrão,

    Eu criei um exemplo que talvez facilite o seu entendimento. No exemplo eu crio duas tabelas, tb_tipo_logradouro e tb_cidade , que são tabelas 'simples', apenas com uma Primary Key. Insiro alguns dados nelas e depois crio uma outra tabela, tb_logradouro , onde esta tabela terá Foreign Keys para as duas tabelas criadas inicialmente.

    Bem, na parte de testes do exemplo, após criar todas as tabelas e populá-las, eu tento apagá-las. A tabela que faz referência a outras, esta pode ser apagada pois ela é apenas uma referência ao dado principal, ou seja, o dado principal permanece intacto. Já o contrário não pode ser feito, ou seja, uma tabela que é referenciada não pode ser apagada. Veja abaixo o script na íntegra.


    create table tb_tipo_logradouro
    (
    	id_tipo_logradouro			int primary key,
    	desc_tipo_logradouro		varchar(100)
    )
    
    insert into tb_tipo_logradouro values (1, 'Rua')
    insert into tb_tipo_logradouro values (2, 'Avenida')
    ------------------------------------------------------------------------
    create table tb_cidade
    (
    	id_cidade			int primary key,
    	desc_cidade			varchar(100)
    )
    
    insert into tb_cidade values (1, 'São Paulo')
    insert into tb_cidade values (2, 'São Bernardo do Campo')
    ------------------------------------------------------------------------
    select * from tb_tipo_logradouro
    select * from tb_cidade
    ------------------------------------------------------------------------
    
    -- Tabela principal que contém as foreign keys --
    create table tb_logradouro
    (
    	id_logradouro		int,
    	id_tipo_logradouro	int,
    	desc_logradouro		varchar(200),
    	id_cidade			int	
    )
    
    alter table tb_logradouro 
    	add constraint fk_cidade foreign key (id_cidade)
    	references tb_cidade (id_cidade)
    	
    alter table tb_logradouro
    	add constraint fk_tipo_logradouro foreign key (id_tipo_logradouro)
    	references tb_tipo_logradouro (id_tipo_logradouro)
    	
    insert into tb_logradouro values (1, 1, 'Manoel da Nóbrega',2)
    insert into tb_logradouro values (2, 2, 'Paulista',1)
    
    ------------------------------------------------------------------------
    select * from tb_logradouro
    
    
    -- Testes -------------------------------------------
    
    -- Isto funciona. Você pode apagar uma tabela que faz referência a outras através de FKs. --
    drop table tb_logradouro
    
    -- Isto não funciona! Você não pode apagar uma tabela que é referenciada por outra. --
    -- Se você tentar fazer isto você receberá o erro abaixo.
    drop table tb_cidade
    
    Msg 3726, Level 16, State 1, Line 1
    Could not drop object 'tb_cidade' because it is referenced by a FOREIGN KEY constraint.
    


    Ficou um pouco mais claro o entendimento com o exemplo?

     

    Att,


    Erickson Ricci - MCP, MCTS, MCTS BI http://ericksonricci.spaces.live.com/blog/
    quarta-feira, 4 de agosto de 2010 23:21
  • Abrão,

    em complemento ao amico erickson o script abaixo vai te ajudar e descobrir as dependencias da dabela que vc quer excluir, ai vc exclui as dependencias listadas no resutlado do script

    EXEC sp_helpconstraint 'sua_tabela','nomsg'
    
    

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba
    • Marcado como Resposta Abrão quinta-feira, 5 de agosto de 2010 14:44
    quinta-feira, 5 de agosto de 2010 12:44
  • obrigado gente pela ajuda deu certo
    quinta-feira, 5 de agosto de 2010 14:45