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 ServerQue 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.
Autres entrées pour ce moteur
- 1101Could not allocate a new page because of insufficient disk space in filegroup (impossible d'allouer une nouvelle page : espace disque insuffisant dans le filegroup)
- 3729Cannot DROP because it is being referenced by object (DROP impossible : l'objet est référencé par un autre objet)
- 3961Snapshot isolation transaction failed because the object was modified by a DDL statement (échec de la transaction en snapshot isolation : objet modifié par une instruction DDL)
- 9421XML parsing: illegal xml character (analyse XML : caractère XML illégal)
- 15151Cannot find the object/principal because it does not exist or you do not have permission (objet/principal introuvable : inexistant ou droits insuffisants)
- 4834You do not have permission to use the bulk load statement (vous n'avez pas le droit d'utiliser l'instruction de chargement en masse)
- 10928Resource limit for the database has been reached (Azure SQL) (limite de ressources de la base atteinte)