1785: Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths
SQL ServerNe 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.
Aynı motorda diğer kayıtlar
- 1101Could not allocate a new page because of insufficient disk space in filegroup
- 3729Cannot DROP because it is being referenced by object
- 3961Snapshot isolation transaction failed because the object was modified by a DDL statement
- 9421XML parsing: illegal xml character
- 15151Cannot find the object/principal because it does not exist or you do not have permission
- 4834You do not have permission to use the bulk load statement
- 10928Resource limit for the database has been reached (Azure SQL)