Sintomas
Suponha que tenta eliminar dados de uma tabela e os dados que está a ser referenciados de outras tabelas no Microsoft SQL Server 2016 e 2017. If explorar consultas plano de execução, pode vê-la a utilizar um operador verifique da referência de chave externa .Nesta situação, poderá receber uma mensagem de erro seguinte mesmo se a linha que está a ser eliminado não for referenciado noutras tabelas:
Msg 547, de 16 de nível de estado 0, linha Número_linha
A instrução DELETE entrou em conflito com a restrição de referência
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".
Resolução
Este problema foi corrigido na actualização cumulativa para o SQL Server:
Nota Este problema foi corrigido no 6 actualização cumulativa para o SQL Server de 2016 SP2.
Acerca de actualizações cumulativas para o SQL Server:
Cada nova actualização cumulativa para o SQL Server contém todas as correcções e todas as correcções de segurança que foram incluídas na anterior actualização cumulativa. Verifique as actualizações cumulativas mais recentes para o SQL Server:
Solução
Para contornar este problema, utilize um dos métodos seguintes:
-
Utilize o nível de compatibilidade abaixo de 130 para executar esta consulta.
-
Alterar a estrutura de índice em tabela de referência.
Mais Informações
Nível de compatibilidade de configuração no âmbito da base de dados inicial 130 no SQL Server 2016, um plano de execução de consulta pode utilizar a referência de chave externa Operador de verificação para verificar se uma linha numa tabela é referenciada por todas as linhas de outro tabelas através de restrições de integridade referencial. Esse operador pode ser utilizado 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 efectuar essa verificação. Se uma tabela de referência tem um índice com várias colunas de chaves, tais algumas colunas no início não fazem parte da chave externa, mas alguns outros as colunas são parte da chave externa. Isto poderá resultar na verificação incorrecta que é efectuada pelo SQL Server.
Por exemplo, considere o seguinte esquema:
Criar tabela tpk (int restrição pk cpk chave primária em cluster)
Criar tabela tfk (um int, int de fk tpk de referências de chave externa de cfk de restrição, clustered(a,fk)) de ia do índice
Este esquema pode resultar neste problema, mas se alterar ordem das colunas no índice ia (fk, um), não o fará.
Referências
Obter informações sobre a terminologiaque a Microsoft utiliza para descrever actualizações de software.