MSSQLSERVER_1785

Şunlar için geçerlidir: SQL Server

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.

Ayrıca bakınız

Kademeli Referans Bütünlüğü