2012-04-02 11 views
20

मैं स्क्रिप्ट तो एक विदेशी कुंजी के साथ एक मेज, यह इस तरह दिखता है:ALTER तालिका [dbo] [MyTable] जाँच प्रतिबंध [FK_MyTable_SomeCol]

GO 
ALTER TABLE [dbo].[MyTable] WITH CHECK ADD CONSTRAINT [FK_MyTable_SomeCol] FOREIGN KEY([SomeCol]) 
REFERENCES [dbo].[MyOtherTable] ([SomeCol]) 
GO 
ALTER TABLE [dbo].[MyTable] CHECK CONSTRAINT [FK_MyTable_SomeCol] 
GO 

(ALTER TABLE [dbo].[MyTable] CHECK CONSTRAINT [FK_MyTable_SomeCol]) के लिए दूसरे भाग क्या है?

+0

जब मैं एक विदेशी कुंजी (SQL सर्वर 2008 R2) वाली तालिका को स्क्रिप्ट करता हूं तो मुझे दूसरा कथन नहीं दिखाई देता है। क्या आप सुनिश्चित हैं कि पहले व्यक्ति में 'चेक के बजाय ** 'NOCHECK' ** ** नहीं है? –

+0

हाँ यह नोचैक के साथ है। अब इसकी कार्यक्षमता मेरे लिए अधिक स्पष्ट है। आप सभी को धन्यवाद! – yonexbat

उत्तर

19

यह इस तरह का एक आर्टिफैक्ट है कि बाधा लिखी गई है - हालांकि इन विकल्पों को निर्दिष्ट करने के लिए अनावश्यक है (चूंकि वे नई बाधाओं के लिए डिफ़ॉल्ट हैं), वही जनरेटर NOCHECK विकल्प भी उसी तरह से उत्पन्न कर सकता है।

ALTER TABLE के लिए DocumentationCHECK/NOCHECK की दो अलग का उपयोग करता है इंगित करता है:

WITH CHECK | WITH NOCHECK

निर्दिष्ट तालिका में डेटा है या के खिलाफ मान्य नहीं किया गया है या नहीं एक नए जोड़े गए या पुन: सक्षम FOREIGN KEY या CHECK बाधा। यदि निर्दिष्ट नहीं है, WITH CHECK नई बाधाओं के लिए माना जाता है, और WITH NOCHECK पुनः सक्षम बाधाओं के लिए माना जाता है।

और:

{ CHECK | NOCHECK } CONSTRAINT

निर्दिष्ट करता है कि constraint_name सक्षम या अक्षम है।

तो एक विकल्प "तालिका की वर्तमान सामग्री की जांच करें" कह रहा है, दूसरा कह रहा है "नया डेटा मान्य करें जैसा कि जोड़ा गया है"।

0

यह आपकी तालिकाओं के लिए referential integrity लागू करने का एक तरीका है।

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