DBAtlas · Atlas de operaciones de bases de datos

1785: Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths (la restricción FOREIGN KEY puede provocar ciclos o varias rutas de cascada)

SQL Server

¿Qué significa?

La foreign key que añade podría crear un ciclo o varias rutas de eliminación/actualización en cascada hacia la misma tabla en operaciones en cascada (ON DELETE/UPDATE CASCADE). SQL Server la rechaza para evitar un comportamiento ambiguo de la cascada.

¿Por qué ocurre?

Una FK con acción en cascada que crea una referencia circular entre tablas (A->B->A) o varias rutas de cascada hacia una tabla. SQL Server no lo permite para evitar un orden de cascada ambiguo y bucles infinitos.

Cómo solucionarlo

Defina la foreign key como ON DELETE NO ACTION / ON UPDATE NO ACTION (quite la cascada): ALTER TABLE child ADD CONSTRAINT fk ... FOREIGN KEY (...) REFERENCES parent(...) ON DELETE NO ACTION; Implemente la eliminación en cascada necesaria con un trigger INSTEAD OF DELETE: el trigger elimina primero las filas hijas y después la fila padre (p. ej., 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 no funciona; la comprobación de la FK se ejecuta antes del trigger, por lo que la eliminación se rechaza con el error 547. Revise las dependencias circulares del modelo de datos.

Abrir en DBAtlas →

Más entradas de este motor