DBAtlas · Atlas de operações de banco de dados

1785: Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths (a constraint FOREIGN KEY pode causar ciclos ou vários caminhos em cascata)

SQL Server

O que significa?

A foreign key que você está adicionando pode criar um ciclo ou vários caminhos de exclusão/atualização em cascata até a mesma tabela em operações em cascata (ON DELETE/UPDATE CASCADE). O SQL Server a rejeita para evitar um comportamento ambíguo em cascata.

Por que acontece?

Uma FK com ação em cascata criando uma referência circular entre tabelas (A->B->A) ou vários caminhos em cascata até uma tabela. O SQL Server não permite isso para evitar uma ordem ambígua de cascata e loops infinitos.

Como resolver

Defina a foreign key como ON DELETE NO ACTION / ON UPDATE NO ACTION (remova a cascata): ALTER TABLE child ADD CONSTRAINT fk ... FOREIGN KEY (...) REFERENCES parent(...) ON DELETE NO ACTION; Implemente a exclusão em cascata necessária com uma trigger INSTEAD OF DELETE: a trigger exclui primeiro as linhas filhas e depois a linha pai (por exemplo, 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;). Uma trigger AFTER DELETE não funciona; a verificação da FK é executada antes da trigger, por isso a exclusão é rejeitada com o erro 547. Revise as dependências circulares no modelo de dados.

Abrir no DBAtlas →

Mais entradas deste banco