Symptom
Anta att du försöker ta bort data från en tabell och data refereras i andra tabeller i Microsoft SQL Server 2016 och 2017. If du utforska frågan Körningsplan, du ser den använda en extern nyckel-referens och kontrollera operator .I det här fallet kan du få följande felmeddelande även om den rad som ta bort inte refereras i andra tabeller:
Msg 547, nivå 16, läge 0, rad LineNumber
DELETE-uttryck står i konflikt med begränsningen referens
Status
Microsoft har bekräftat att detta är ett problem i Microsoft-produkterna som nämns i avsnittet ”gäller”.
Lösning
Detta problem har korrigerats i följande kumulativ uppdatering för SQL Server:
Obs! Problemet är åtgärdat i kumulativ uppdatering 6 för SQL Server 2016 SP2.
Om samlade uppdateringar för SQL Server:
Varje ny kumulativ uppdatering för SQL Server innehåller alla snabbkorrigeringar och alla säkerhetskorrigeringar som ingick i den tidigare kumulativa uppdateringen. Checka ut de senaste kumulativa uppdateringarna för SQL Server:
Lösning
Använd någon av följande metoder för att lösa problemet:
-
Använda kompatibilitetsnivån under 130 för att köra den här frågan.
-
Ändra index strukturen på den refererande tabellen.
Mer information
Starta databasen begränsad kompatibilitetsnivån för konfiguration 130 i SQL Server 2016 Körningsplan för frågan kan använda främmande nyckel-referens Kontrollera att operatören om du vill kontrollera om några rader i andra refererar till en rad i en tabell tabeller via referensintegritetsvillkor. Operator kan användas om ett stort antal externa tabeller refererar till en tabell. I den här operatorn SQL Server väljer du ett index i varje refererande tabell för att utföra denna kontroll. Om en refererande tabell har ett index med flera nyckelkolumner sådan del kolumner i början ingår inte i den externa nyckeln, men vissa andra kolumner är en del av den externa nyckeln. Det kan resultera i felaktig kontroll som utförs med SQLServer.
Tänk dig följande schema:
Skapa tabell tpk (pk int villkor Klustrad primärnyckel cpk)
Skapa tabell tfk (en int, fk int begränsningen cfk externa referenser tpk index ia clustered(a,fk))
Schemat kan leda till problemet, men om du ändrar ordningen på kolumnerna i index ia till (fk, en), kommer den inte.
Referenser
Lär dig mer om den terminologisom Microsoft använder för att beskriva programuppdateringar.