Příznaky
Předpokládejme, že pokusíte odstranit data z tabulky a data se odkazuje v jiných tabulkách v Microsoft SQL Server 2016 a 2017. If prozkoumat dotaz plán vykonání, uvidíte jej použít operátor cizího klíče referenční kontrola .V takovém případě můžete obdržet následující chybovou zprávu i když je řádek odstranění není odkazováno v jiných tabulkách:
Zpráva 547, úroveň 16, stát 0, řádek LineNumber
Příkaz DELETE konfliktu s omezením odkaz
Stav
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.
Řešení
Tento problém je vyřešen v následující kumulativní aktualizaci pro SQL Server:
Poznámka: Tento problém je opraven v kumulativní aktualizaci 6 pro SQL Server 2016 SP2.
O kumulativní aktualizace pro SQL Server:
Každé nové kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Rezervovat nejnovější kumulativní aktualizace pro SQL Server:
Alternativní řešení
Jako alternativní řešení použijte jednu z následujících metod:
-
Chcete-li spustit tento dotaz použijte úroveň kompatibility pod 130.
-
Změnit index struktury v odkazující tabulce.
Další informace
Úroveň kompatibility konfigurace oboru počáteční databáze 130 v SQL serveru 2016 plán spuštění dotazu pomocí cizího klíče referenční Operátor kontroly ověřit, pokud je řádek v tabulce odkazuje všech řádků v jiných tabulky pomocí omezení referenční integrity. Pokud lze použít takové operátor velký počet tabulek odkazuje tabulku. Tento operátor in SQL Server zvolí indexu v každé odkazující tabulce provádět takové kontroly. Pokud Referenční tabulka má index s více sloupců klíče, takové některé na začátku sloupce nejsou součástí cizí klíč, ale některé jiné sloupce jsou součástí cizího klíče. To může mít za následek nesprávnou kontrolní, která se provádí pomocí serveru SQL Server.
Zvažte například následující schéma:
vytvořit tabulku tpk (omezení int pk cpk primární klíč clusteru)
Vytvořte tabulku tfk (int, fk int omezení cfk odkazy na cizí klíč tpk, index ia clustered(a,fk))
Toto schéma může způsobit tento problém, ale pokud změníte pořadí sloupců v indexu ia (fk,), nikoliv.
Odkazy
Seznamte se terminologii, že společnost Microsoft používá k popisu aktualizací softwaru.