2010-04-28 10 views
5

हम अपने SQL सर्वर 2005 DB है कि कुछ विदेशी कुंजी पर हटाएँ कास्केड संपत्ति सेट है, जो हमें निर्देशात्मक त्रुटियों की एक जोड़ी दे रहा है जब हम कोशिश करते हैं और कुछ रिकॉर्डों को नष्ट नहीं है में महसूस किया गया है।ऑन डिलीट कैस्केड के साथ एक विदेशी कुंजी बाधा अद्यतन नहीं कर रहा है?

प्रबंधन स्टूडियो का उपयोग करें मैंने DROP और CREATE एसक्यूएल को स्क्रिप्ट किया, लेकिन ऐसा लगता है कि CREATE सही तरीके से काम नहीं कर रहा है।

DROP:

USE [FootprintReports] 
GO 
IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK__SUBSCRIPTIONS_Reports]') AND parent_object_id = OBJECT_ID(N'[dbo].[_SUBSCRIPTIONS]')) 
ALTER TABLE [dbo].[_SUBSCRIPTIONS] DROP CONSTRAINT [FK__SUBSCRIPTIONS_Reports] 

और CREATE

USE [FootprintReports] 
GO 
ALTER TABLE [dbo].[_SUBSCRIPTIONS] WITH CHECK ADD CONSTRAINT [FK__SUBSCRIPTIONS_Reports] FOREIGN KEY([PARAMETER_ReportID]) 
REFERENCES [dbo].[Reports] ([ID]) 
ON DELETE CASCADE 
GO 
ALTER TABLE [dbo].[_SUBSCRIPTIONS] CHECK CONSTRAINT [FK__SUBSCRIPTIONS_Reports] 

मैं मैन्युअल रूप से पर का मूल्य जीयूआई में हटाएँ, छोड़ने और बहुत सारे के बाद बदलते हैं, पर हटाएँ सही ढंग से नहीं है अपडेट किया गया।

एक परीक्षण के रूप में, मैं Set Null लिए जीयूआई के हटाएं नियम निर्धारित किया है। यह सही ढंग से गिरा दिया गया, और त्रुटि के बिना फिर से बनाया गया। यदि मैं जीयूआई में वापस आया, तो यह अभी भी हटाए गए नियम के रूप में Set Null दिखा रहा है।

मैंने कुछ गलत किया है? या ON DELETE CASCADE नियम जोड़ने के लिए बाधा को संपादित करने का कोई और तरीका है?

उत्तर

7

आपका दृष्टिकोण सही दिखता है। ALTER TABLE एक बाधा को संपादित करने का एकमात्र तरीका है। शायद प्रबंधन स्टूडियो को डेटा रीफ्रेश की आवश्यकता है। रीफ्रेश राइट-क्लिक करें, या ऐप बंद करें और उसे फिर से खोलें।

+0

हम्म, चीयर्स। मैं उस पर एक नज़र डालूंगा। –

+1

हाँ, यह मुद्दा था। किसी कारण से प्रबंधन स्टूडियो अभी भी पुराना मूल्य दिखा रहा था। मुझे ऐप बंद करना था और बदलाव को प्रदर्शित करने से पहले इसे पुनरारंभ करना पड़ा। धन्यवाद! –

संबंधित मुद्दे