DBAtlas · Veritabanı operasyon atlası

1785: Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths

SQL Server

Ne demek?

Eklemeye çalıştığınız foreign key, cascade (ON DELETE/UPDATE CASCADE) işlemlerinde döngü ya da aynı tabloya birden fazla basamaklı silme/güncelleme yolu oluşturabilir. SQL Server, belirsiz cascade davranışını önlemek için bunu reddeder.

Neden olur?

Cascade eylemli bir FK'nin, tablolar arasında dairesel bir referans (A->B->A) ya da bir tabloya birden çok cascade yolu yaratması. SQL Server, cascade sırasının belirsizleşmesini ve sonsuz döngüyü engellemek için buna izin vermez.

Nasıl çözülür?

Foreign key'i ON DELETE NO ACTION / ON UPDATE NO ACTION olarak tanımlayın (cascade'i kaldırın): ALTER TABLE cocuk ADD CONSTRAINT fk ... FOREIGN KEY (...) REFERENCES ebeveyn(...) ON DELETE NO ACTION; İhtiyaç duyulan basamaklı silmeyi bir INSTEAD OF DELETE trigger'ıyla uygulayın: trigger önce alt satırları, sonra üst satırı silsin (ör. DELETE c FROM cocuk c JOIN deleted d ON c.ebeveyn_id = d.id; DELETE e FROM ebeveyn e JOIN deleted d ON e.id = d.id;). AFTER DELETE trigger'ı işe yaramaz; FK kontrolü trigger'dan önce çalıştığı için silme 547 hatasıyla reddedilir. Veri modelinde döngüsel bağımlılıkları gözden geçirin.

DBAtlas'ta aç →

Aynı motorda diğer kayıtlar