टेटर टेबल चेक कंस्ट्रक्टर


25

SQL सर्वर में ऑब्जेक्ट एक्सप्लोरर से, एक विदेशी-कुंजी बाधा का चयन और स्क्रिप्टिंग करते समय, निम्न कोड उत्पन्न होता है।

     USE [MyTestDatabase]
     GO

     ALTER TABLE [dbo].[T2] WITH NOCHECK ADD CONSTRAINT [FK_T2_T1] FOREIGN KEY([T1ID])
     REFERENCES [dbo].[T1] ([T1ID])
     GO

     ALTER TABLE [dbo].[T2] CHECK CONSTRAINT [FK_T2_T1]
     GO

अंतिम कथन "चर्चित चाक कन्स्ट्रक्शन" का उद्देश्य क्या है? इससे कोई फर्क नहीं पड़ता कि यह चलाया जाता है या नहीं। यह मौजूदा खराब डेटा पर विफल नहीं है, और न ही यह बदलता है कि नए डेटा पर बाधा को लागू किया जाएगा।

धन्यवाद!

जवाबों:


23

यह सुनिश्चित करता है कि बनने के बाद बाधा सक्षम है। आपके ALTER TABLEकथन में WITH NOCHECKवह टुकड़ा शामिल है जो कहता है कि बाधा के निर्माण के दौरान मौजूदा खराब आंकड़ों की जांच नहीं करना चाहिए।

जैसा कि लिखा गया है, WITH NOCHECKपहले बयान की वजह से बाधा के खिलाफ मौजूदा डेटा की जाँच नहीं की जाएगी । दूसरा वक्तव्य जारी करने से किसी भी भविष्य के बदलाव के लिए बाधा के खिलाफ जांच को सक्षम किया जाएगा जो कि ALTER TABLE [dbo].[T2] NOCHECK CONSTRAINT [FK_T2_T1]जारी किए गए बिंदु तक, बाधा से आच्छादित है ।

जैसा कि लिखा गया है, बयान मूल रूप से कह रहे हैं "इस विदेशी कुंजी बाधा को बनाएं, लेकिन मौजूदा डेटा के खिलाफ इसकी जांच न करें। डेटा के किसी भी आगामी परिवर्तन के लिए इसे सक्रिय करें।"


वास्तव में मैंने जाँच की है कि, अगर डेटा खराब है तो इससे कोई फर्क नहीं पड़ता, पहली या दूसरी पंक्ति विफल नहीं होगी। एक असफलता के साथ बनाने के लिए, उन्हें इस तरह दिखना होगा:
Delux

2
ALTER तालिका [dbo] [टी 2] के साथ जांच जाँच प्रतिबंध [FK_T2_T1]।
डीलक्स

सही। लेकिन आप इसे तब विफल होते देखेंगे जब किसी बिंदु पर आप एक INSERT या एक अद्यतन चलाने की कोशिश करते हैं जो बाधा का उल्लंघन करता है। यदि 2 स्टेटमेंट निष्पादित किए जाते हैं, तो खराब डेटा मौजूद नहीं होगा।
स्क्विलमैन

7

आपका पहला बयान एक अक्षम बाधा बनाता है। इसे सक्षम और संभवतः विश्वसनीय बनाने की आवश्यकता है। निम्नलिखित अजीब सिंटैक्स सुनिश्चित करेगा कि आपका अवरोध सक्षम और विश्वसनीय है:

ALTER TABLE YourTable
      WITH CHECK CHECK CONSTRAINT YourConstraint;

ह्यूगो कोर्नेलिस द्वारा एक बहुत अच्छी ब्लॉग पोस्ट है जो इसे अच्छे से विस्तार से बताती है: क्या आप अपने बाधाओं पर भरोसा कर सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.