मैं एक एसक्यूएल तालिका के रूप में नीचे परिभाषित किया गया है:समग्र प्राथमिक कुंजी और विदेशी कुंजी बाधा त्रुटि
CREATE TABLE [TestComposite] (
ID int,
SiteUrl nvarchar(255),
Name nvarchar(max) NOT NULL,
ParentID int NULL,
PRIMARY KEY (ID, SiteUrl)
);
आइटम और फ़ोल्डरों, एक ही तालिका के अंदर जमा हो जाती है, तो एक आइटम एक फ़ोल्डर के अंदर है, ParentID स्तंभ है फ़ोल्डर की आईडी। और जब मैं फ़ोल्डर हटाता हूं तो मैं CASCADE आइटम/फ़ोल्डर को हटाने में सक्षम होना चाहता हूं।
एक उदाहरण अधिक स्पष्ट हो सकता है:
INSERT INTO [TestComposite] VALUES (1, 'site1', 'Item1', NULL)
INSERT INTO [TestComposite] VALUES (2, 'site1', 'Item2', NULL)
INSERT INTO [TestComposite] VALUES (3, 'site1', 'Folder1', NULL)
INSERT INTO [TestComposite] VALUES (4, 'site1', 'Folder1.Item1', 3)
INSERT INTO [TestComposite] VALUES (5, 'site1', 'Folder1.Item2', 3)
INSERT INTO [TestComposite] VALUES (6, 'site1', 'Folder1.Folder1', 3)
INSERT INTO [TestComposite] VALUES (7, 'site1', 'Folder1.Folder1.Item1', 6)
etc...
तो अगर मैं आइटम 3 (एक फ़ोल्डर), मैं चाहता हूँ आइटम/फ़ोल्डर 4, 5, 6 और 7 भी हटाए जाने के लिए हटा दें। विदेशी कुंजी बाधा का परिचय
तालिका 'TestComposite' चालू 'fk_parentid' चक्र या एक से अधिक झरना रास्तों का कारण हो सकता:
मैं एक बाधा के समान जोड़ने की कोशिश की:
ALTER TABLE [TestComposite]
ADD CONSTRAINT fk_parentid
FOREIGN KEY (ParentID, SiteUrl)
REFERENCES [TestComposite] (ID, SiteUrl) ON DELETE CASCADE;
लेकिन यह मुझे इस त्रुटि देता है। किसी भी कार्रवाई को हटाएं या अद्यतन पर कोई क्रिया निर्दिष्ट करें, या अन्य विदेशी कुंजी बाधाओं को संशोधित करें।
मैंने पेरेंटसाइट यूआरएल नामक दूसरा साइट यूआरएल कॉलम जोड़ने का भी प्रयास किया, यदि समस्या यह थी कि एक कॉलम एक ही एफके/पीके का हिस्सा नहीं होगा, लेकिन मेरे पास एक ही त्रुटि संदेश है।
क्या मैं कुछ गलत कर रहा हूं?
धन्यवाद,
मैं गलत हो सकता हूं क्योंकि मैंने अभी तक इसका परीक्षण नहीं किया है, लेकिन मुझे नहीं लगता कि यह मेरे मामले में आइटम 7 को हटा देगा, क्योंकि यह पदानुक्रम के दूसरे स्तर पर है? –
'ओमाआर': हाँ यह' 7' भी हटा देगा। यह एक रिकर्सिव 'सीटीई' है। – Quassnoi
धन्यवाद, यह बहुत अच्छा काम करता है। मुझे रिकर्सिव सीटीई के बारे में पता नहीं था। और ऐसा लगता है कि यह SQL Server 2005 और SQL Server 2008 दोनों पर काम करता है। –