Criando e modificando restrições FOREIGN KEY

Você pode criar uma restrição FOREIGN KEY como parte da definição de tabela ao criar a tabela. Se a tabela já existir, é possível adicionar uma restrição FOREIGN KEY, desde que ela seja vinculada a uma restrição PRIMARY KEY ou UNIQUE existente na mesma tabela ou em outra. Uma tabela pode conter várias restrições FOREIGN KEY.

Se existir uma restrição FOREIGN KEY, será possível modificá-la ou excluí-la. Por exemplo, talvez você queira que uma restrição FOREIGN KEY da tabela faça referência a outras colunas. No entanto, não é possível alterar o comprimento de uma coluna que está definida com uma restrição FOREIGN KEY.

ObservaçãoObservação

Para modificar a restrição FOREIGN KEY, primeiro exclua a restrição FOREIGN KEY e, em seguida, recrie-a com a nova definição.

Exclua uma restrição FOREIGN KEY para remover o requisito de integridade referencial entre as colunas de chave estrangeira e a chave primária, ou uma restrição UNIQUE, de outra tabela.

Criar uma restrição FOREIGN KEY ao criar uma tabela

CREATE TABLE (Transact-SQL)

Criar uma restrição FOREIGN KEY em uma tabela existente

ALTER TABLE (Transact-SQL)

Como criar relações entre tabelas (Visual Database Tools)

Excluir uma restrição FOREIGN KEY

ALTER TABLE (Transact-SQL)

Forçando um restrição FOREIGN KEY usando WITH NOCHECK

Quando uma restrição FOREIGN KEY é adicionada a uma ou mais colunas existentes na tabela, por padrão, o Mecanismo de Banco de Dados examina os dados existentes nas colunas para garantir que todos os valores, exceto NULL, existem nas colunas da restrição PRIMARY KEY ou UNIQUE referenciada. Contudo, especificando WITH NOCHECK, o Mecanismo de Banco de Dados pode impedir a verificação de dados da coluna em comparação com a nova restrição e adicionar a restrição independentemente dos dados da coluna. A opção WITH NOCHECK é útil quando os dados existentes já atendem à nova restrição FOREIGN KEY, ou quando uma regra de negócios exige que a restrição seja imposta apenas desse ponto em diante.

Entretanto, seja cauteloso ao adicionar uma restrição sem verificação porque dessa forma você está ignorando os controles do Mecanismo de Banco de Dados que impõem a integridade dos dados da tabela.

Impedir a verificação de dados existente ao criar uma restrição FOREIGN KEY

ALTER TABLE (Transact-SQL)

Desabilitando restrições FOREIGN KEY

É possível desabilitar restrições FOREIGN KEY existentes para determinadas operações, como operações INSERT, UPDATE e o processamento de replicação.

  • Instruções INSERT e UPDATE

    A desabilitação de uma restrição FOREIGN KEY permite a modificação dos dados da tabela sem a validação feita pelas restrições. Desabilite a restrição FOREIGN KEY durante as instruções INSERT e UPDATE se os novos dados violarem a restrição ou se a restrição tiver que ser aplicada somente aos dados que já estão no banco de dados.

    ObservaçãoObservação

    Todas as ações em cascata definidas em uma chave primária relacionada não serão executadas nas linhas que contêm as chaves estrangeiras que estão desabilitadas.

  • Processamento de replicação

    Desabilite uma restrição FOREIGN KEY durante a replicação se a restrição for específica para o banco de dados de origem. Quando uma tabela é replicada, sua definição e seus dados são copiados do banco de dados de origem para o banco de dados de destino. Se as restrições FOREIGN KEY forem específicas do banco de dados de origem, mas não estiverem desabilitadas durante a replicação, elas podem impedir, desnecessariamente, a inserção de novos dados no banco de dados de destino. Para obter mais informações, consulte Controlando restrições, identidades e gatilhos com NOT FOR REPLICATION.

Desabilitar uma restrição de chave FOREIGN KEY para instruções INSERT e UPDATE

ALTER TABLE (Transact-SQL)

Como desabilitar restrições de chave estrangeira com instruções INSERT e UPDATE (Visual Database Tools)

Desabilitar uma restrição FOREIGN KEY para replicação

ALTER TABLE (Transact-SQL)

Como desabilitar restrições de chave estrangeira para replicação (Visual Database Tools)

Obter informações sobre restrições FOREIGN KEY

sys.foreign_keys (Transact-SQL)

Obter informações sobre colunas que compõem uma restrição FOREIGN KEY

sys.foreign_key_columns (Transact-SQL)

Consulte também

Conceitos