Sintomas
Suponha que você tentar excluir dados de uma tabela e os dados que está sendo referenciados em outras tabelas no Microsoft SQL Server 2016 e 2017. ,f explorar consulta plano de execução, você pode vê-lo usar um operador de verificação de referência de chave estrangeira .Nessa situação, você pode receber a seguinte mensagem de erro mesmo que a linha está sendo excluído não é referenciado em outras tabelas:
Msg 547, nível 16, estado 0, linha LineNumber
A instrução DELETE entrou em conflito com a restrição de referência
Status
A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".
Resolução
Esse problema é corrigido na atualização cumulativa seguinte para SQL Server:
Observação: Esse problema é corrigido na 6 de atualização cumulativa para SQL Server 2016 SP2.
Sobre atualizações cumulativas para o SQL Server:
Cada nova atualização cumulativa para SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas com as atualização cumulativa anterior. Confira as mais recentes atualizações cumulativas para o SQL Server:
Solução alternativa
Como solução alternativa para esse problema, use um dos seguintes métodos:
-
Use o nível de compatibilidade abaixo 130 para executar esta consulta.
-
Alterar estrutura de índice na tabela de referência.
Informações adicionais
Nível de compatibilidade da configuração no escopo do banco de dados inicial 130 no SQL Server 2016, um plano de execução da consulta pode usar a referência de chave estrangeira Seleção de operador para verificar se uma linha em uma tabela é referenciada por quaisquer linhas em outros tabelas por meio de restrições de integridade referencial. Operador pode ser usado se uma tabela é referenciada por um grande número de tabelas externas. Este operador in SQL Server escolhe um índice em cada tabela de referência para fazer essa verificação. Se uma tabela de referência tem um índice com várias colunas chaves, tal alguns colunas no início não fazem parte da chave estrangeira, mas alguma outra colunas fazem parte da chave estrangeira. Isso pode resultar em verificação incorreta que é executada pelo SQL Server.
Por exemplo, considere o seguinte esquema:
Criar tabela tpk (pk int restrição cpk agrupado chave primária)
Criar tabela tfk (um int, int fk restrição cfk referências de chave estrangeira tpk, clustered(a,fk)) de ia de índice
Esse esquema pode causar esse problema, mas se você alterar ordem das colunas no índice ia para (fk, um), ele será não.
Referências
Saiba mais sobre o terminologiaque a Microsoft usa para descrever as atualizações de software.