Partilhar via


Desative restrições de chave estrangeira com instruções INSERT e UPDATE

Aplica-se a: SQL Server 2016 (13.x) e posterior Banco de Dados SQL do AzureInstância Gerenciada SQL do AzureBanco de Dados do Azure Synapse AnalyticsAnalytics Platform System (PDW)no Microsoft Fabric

Você pode desabilitar uma restrição de chave estrangeira durante transações INSERT e UPDATE no SQL Server usando o SQL Server Management Studio ou o Transact-SQL. Use esta opção se souber que os novos dados não violarão a restrição existente ou se a restrição se aplicar apenas aos dados já existentes no banco de dados.

Limitações e restrições

Depois de desativar essas restrições, futuras inserções ou atualizações na coluna não serão validadas em relação às condições de restrição.

permissões

Requer permissão ALTER na tabela.

Utilize o SQL Server Management Studio

Para desabilitar uma restrição de chave estrangeira para instruções INSERT e UPDATE

  1. No Pesquisador de Objetos, expanda a tabela com a restrição e, em seguida, expanda a pasta de Chaves.

  2. Clique com o botão direito do mouse na restrição e selecione Modificar.

  3. Na grelha em Table Designer, selecione Impor restrição de chave estrangeira e selecione Não no menu suspenso.

  4. Selecione Fechar.

  5. Para reativar a restrição quando desejado, inverta as etapas acima. Selecione Aplicar restrição de chave estrangeira e selecione Sim no menu suspenso.

  6. Para confiar na validade da restrição ao verificar os dados existentes na relação da chave estrangeira, seleccione Verificar dados existentes na criação ou reativação e escolha Sim no menu suspenso. Isso garantiria que a restrição da chave estrangeira fosse fiável.

  • Se Verificar Dados Existentes na Criação ou Reativação estiver definido como Não, a chave estrangeira não verificará os dados existentes quando for novamente ativada. O otimizador de consulta é, portanto, incapaz de considerar possíveis melhorias de desempenho. Chaves estrangeiras confiáveis são recomendadas porque podem ser usadas para simplificar planos de execução com suposições baseadas na restrição de chave estrangeira. Para verificar se as chaves estrangeiras são confiáveis em seu banco de dados, consulte uma consulta de exemplo mais adiante neste artigo.

Usar Transact-SQL

Para desabilitar uma restrição de chave estrangeira para instruções INSERT e UPDATE

  1. No Pesquisador de Objetos , conecte-se a uma instância do Mecanismo de Banco de Dados.

  2. Na barra Padrão, selecione Nova Consulta.

  3. Copie e cole o exemplo a seguir na janela de consulta e selecione Executar.

    USE AdventureWorks2022;  
    GO  
    ALTER TABLE Purchasing.PurchaseOrderHeader  
    NOCHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;  
    GO  
    
  4. Para reativar a restrição quando desejado, copie e cole o exemplo a seguir na janela de consulta e selecione Executar.

    USE AdventureWorks2022;  
    GO  
    ALTER TABLE Purchasing.PurchaseOrderHeader  
    CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;  
    GO  
    
  5. Verifique se a restrição no seu ambiente é confiável e ativada. Se is_not_trusted = 1, a chave estrangeira não verifica os dados existentes quando é reativada ou recriada. O otimizador de consulta é, portanto, incapaz de considerar possíveis melhorias de desempenho. Chaves estrangeiras confiáveis são recomendadas porque podem ser usadas para simplificar planos de execução com suposições baseadas na restrição de chave estrangeira. Copie e cole o exemplo a seguir na janela de consulta e selecione Executar.

    SELECT o.name, fk.name, fk.is_not_trusted, fk.is_disabled
    FROM sys.foreign_keys AS fk
    INNER JOIN sys.objects AS o ON fk.parent_object_id = o.object_id
    WHERE fk.name = 'FK_PurchaseOrderHeader_Employee_EmployeeID';
    GO
    

    Você deve definir a restrição de chave estrangeira como confiável se os dados existentes na tabela estiverem em conformidade com a restrição de chave estrangeira. Para definir a chave estrangeira como confiável, use o script a seguir para confiar na restrição de chave estrangeira novamente, observando a sintaxe WITH CHECK adicional. Copie e cole o exemplo a seguir na janela de consulta e selecione Executar.

    ALTER TABLE [Purchasing].[PurchaseOrderHeader] 
    WITH CHECK 
    CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;
    GO
    

Próximos passos