Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Details
| Attribute | Value |
|---|---|
| Ürün Adı | SQL Server |
| Olay Kimliği | 1785 |
| Olay Kaynağı | MSSQLSERVER |
| Bileşen | SQLEngine |
| Sembolik Ad | CRTFKINVTOPO |
| İleti Metni | '%.ls' tablosuna '%.ls' kısıtlaması eklendiğinde, döngüler veya birden fazla zincirleme yol oluşabilir. NO DELETE ACTION veya NO ACTION (HAREKİZDE UPDATE ) belirtin veya diğer YABANCI ANAHTAR kısıtlamalarını değiştirin. |
Explanation
Bu hata mesajını alıyorsunuz çünkü SQL Server'da, bir tablo, ya a DELETE veya bir UPDATE ifadeyle başlatılan tüm zincirleme referans eylemlerinin listesinde birden fazla kez görünemez. Zincirli referans eylemler ağacı, zincirli referans eylemler ağacında belirli bir tabloya sadece bir yol açmalıdır.
Kullanıcıya aşağıdaki gibi bir hata mesajı bildirilir:
Sunucu: Msg 1785, Seviye 16, Durum 1, Satır 1 Tablo 'table2'de YABANCI ANAHTAR kısıtlaması 'fk_two' eklenmesi döngülere veya birden fazla kaskad yola yol açabilir. NO DELETE ACTION veya NO ACTION (HAREKİZDE UPDATE ) belirtin veya diğer YABANCI ANAHTAR kısıtlamalarını değiştirin. Sunucu: Mesaj 1750, Seviye 16, Durum 1, Satır 1 Kısıtlama oluşturulamadı. Önceki hatalara bakınız
Kullanıcı eylemi
Bu sorunu çözmek için, bir zincirleme referans eylemleri listesinde bir tabloya tek bir yol oluşturacak bir yabancı anahtar oluşturun.
Referans bütünlüğünü birkaç şekilde uygulayabilirsiniz. Deklaratif Referans Bütünlüğü (DRI) en temel yöntemdir, ancak aynı zamanda en az esnek olanıdır. Daha fazla esnekliğe ihtiyacınız varsa ama yine de yüksek bir bütünlük istiyorsanız, tetikleyicileri kullanabilirsiniz.
Daha fazla bilgi
Aşağıdaki örnek kod, hata mesajını üreten YABANCI ANAHTAR oluşturma girişiminin bir örneğidir:
USE tempdb
GO
CREATE TABLE table1 (user_ID INTEGER NOT NULL PRIMARY KEY, user_name
CHAR(50) NOT NULL)
GO
CREATE TABLE table2 (author_ID INTEGER NOT NULL PRIMARY KEY, author_name
CHAR(50) NOT NULL, lastModifiedBy INTEGER NOT NULL, addedby INTEGER NOT NULL)
GO
ALTER TABLE table2 ADD CONSTRAINT fk_one FOREIGN KEY (lastModifiedby)
REFERENCES table1 (user_ID) ON DELETE CASCADE ON UPDATE cascade
GO
ALTER TABLE table2 ADD CONSTRAINT fk_two FOREIGN KEY (addedby)
REFERENCES table1(user_ID) ON DELETE NO ACTION ON UPDATE cascade
GO
--this fails with the error because it provides a second cascading path to table2.
ALTER TABLE table2 ADD CONSTRAINT fk_two FOREIGN KEY (addedby)
REFERENCES table1 (user_ID) ON DELETE NO ACTION ON UPDATE NO ACTION
GO
-- this works.