DBAtlas · Atlas d'exploitation des bases de données

1785: Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths (la contrainte FOREIGN KEY peut créer des cycles ou plusieurs chemins de cascade)

SQL Server

Que signifie cette erreur ?

La clé étrangère que vous ajoutez pourrait créer un cycle ou plusieurs chemins de suppression/mise à jour en cascade vers la même table lors des opérations en cascade (ON DELETE/UPDATE CASCADE). SQL Server la refuse pour éviter un comportement de cascade ambigu.

Cause

Une FK avec action en cascade créant une référence circulaire entre tables (A->B->A) ou plusieurs chemins de cascade vers une même table. SQL Server l'interdit pour éviter un ordre de cascade ambigu et des boucles infinies.

Comment la corriger

Définissez la clé étrangère en ON DELETE NO ACTION / ON UPDATE NO ACTION (supprimez la cascade) : ALTER TABLE child ADD CONSTRAINT fk ... FOREIGN KEY (...) REFERENCES parent(...) ON DELETE NO ACTION; Implémentez la suppression en cascade requise avec un trigger INSTEAD OF DELETE : le trigger supprime d'abord les lignes enfants, puis la ligne parente (par ex. 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;). Un trigger AFTER DELETE ne fonctionne pas ; le contrôle de FK s'exécute avant le trigger, la suppression est donc refusée avec l'erreur 547. Revoyez les dépendances circulaires du modèle de données.

Ouvrir dans DBAtlas →

Autres entrées pour ce moteur