1785: Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths
SQL ServerWas bedeutet das?
Der hinzuzufügende Foreign Key könnte bei kaskadierenden Operationen (ON DELETE/UPDATE CASCADE) einen Zyklus oder mehrere kaskadierende Lösch-/Aktualisierungspfade zur selben Tabelle erzeugen. SQL Server lehnt ihn ab, um mehrdeutiges Kaskadenverhalten zu vermeiden.
Ursache
Ein FK mit Kaskadenaktion, der einen Zirkelbezug zwischen Tabellen (A->B->A) oder mehrere Kaskadenpfade zu einer Tabelle erzeugt. SQL Server verbietet das, um mehrdeutige Kaskadenreihenfolgen und Endlosschleifen zu verhindern.
Lösung
Definiere den Foreign Key als ON DELETE NO ACTION / ON UPDATE NO ACTION (entferne die Kaskade): ALTER TABLE child ADD CONSTRAINT fk ... FOREIGN KEY (...) REFERENCES parent(...) ON DELETE NO ACTION; Implementiere das benötigte kaskadierende Löschen mit einem INSTEAD OF DELETE-Trigger: Der Trigger löscht zuerst die Kindzeilen, dann die Elternzeile (z. B. DELETE c FROM child c JOIN deleted d ON c.parent_id = d.id; DELETE e FROM parent e JOIN deleted d ON e.id = d.id;). Ein AFTER DELETE-Trigger funktioniert nicht; die FK-Prüfung läuft vor dem Trigger, daher wird das Löschen mit Fehler 547 abgelehnt. Prüfe zirkuläre Abhängigkeiten im Datenmodell.
Weitere Einträge zu dieser Datenbank
- 1101Could not allocate a new page because of insufficient disk space in filegroup
- 3729Cannot DROP because it is being referenced by object
- 3961Snapshot isolation transaction failed because the object was modified by a DDL statement
- 9421XML parsing: illegal xml character
- 15151Cannot find the object/principal because it does not exist or you do not have permission
- 4834You do not have permission to use the bulk load statement
- 10928Resource limit for the database has been reached (Azure SQL)