आप सभी CHECK
. को सक्षम करने के लिए नीचे दिए गए कोड का उपयोग कर सकते हैं और SQL सर्वर में एक विशिष्ट तालिका के लिए विदेशी कुंजी बाधाएं।
जब आप SQL सर्वर में एक बाधा को सक्षम करते हैं, तो आपको यह तय करने की आवश्यकता होती है कि उसे किसी मौजूदा डेटा की जांच करनी चाहिए या नहीं। यह एक महत्वपूर्ण विचार है यदि तालिका में पहले से ही डेटा है, क्योंकि वह मौजूदा डेटा संभावित रूप से बाधा के नियमों का उल्लंघन कर सकता है।
नमूना विवरण
नीचे दो नमूना विवरण दिए गए हैं जो मौजूदा डेटा की जाँच करने और बाधाओं को सक्षम करने पर उसकी जाँच न करने के बीच के अंतर को दिखाते हैं।
मौजूदा डेटा की जांच करने के लिए, WITH CHECK
का उपयोग करें बाधाओं को सक्षम करते समय अपने कथन में, अन्यथा WITH NOCHECK
. का उपयोग करें ।
चेक के साथ:
ALTER TABLE TableName WITH CHECK CHECK CONSTRAINT ALL
बिना किसी चेक के:
ALTER TABLE TableName WITH NOCHECK CHECK CONSTRAINT ALL
बस TableName
replace को बदलें लागू तालिका के नाम के साथ।
नीचे एक उदाहरण दिया गया है जहां मैं यह करता हूं और परिणामों की जांच करता हूं।
उदाहरण 1 - बाधाओं की समीक्षा करें
सबसे पहले, मैं वर्तमान CHECK
. पर एक नज़र डालूँगा डेटाबेस में बाधाएं, यह देखने के लिए कि वे सक्षम या अक्षम हैं या नहीं।
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys UNION SELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_trusted FROM sys.check_constraints;
परिणाम:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 1 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | ConstraintTest | chkTeamSize | 1 | 1 | | Occupation | chkJobTitle | 0 | 0 | +----------------+-----------------+---------------+------------------+
तो वर्तमान में चार हैं CHECK
डेटाबेस में बाधाएं, जिनमें से तीन ConstraintTest
. के लिए हैं टेबल।
हम देख सकते हैं कि तालिका के लिए सभी बाधाएं अक्षम हैं क्योंकि is_disabled 1 . पर सेट है ।
हम यह भी देख सकते हैं कि is_not_trusted कॉलम 1 . पर सेट है इन बाधाओं के लिए। इसका मतलब है कि वे भरोसेमंद नहीं हैं। अक्षम होने पर उन पर भरोसा नहीं किया जा सकता, क्योंकि अमान्य डेटा बिना चेक किए डेटाबेस में प्रवेश कर सकता है। इस पर और नीचे।
दूसरी बाधा (किसी अन्य तालिका के लिए) पहले से ही सक्षम और विश्वसनीय है (लेकिन हम इस लेख में उस तालिका/बाधा को अनदेखा कर सकते हैं)।
उदाहरण 2 - चेक के साथ उपयोग कर बाधाओं को सक्षम करें
अब मैं ConstraintTest
. के लिए सभी बाधाओं को सक्षम कर दूंगा तालिका:
ALTER TABLE ConstraintTest WITH CHECK CHECK CONSTRAINT ALL;
बस हो गया - हो गया।
अब परिणाम देखने के लिए पहले उदाहरण से उसी क्वेरी को चलाते हैं।
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys UNION SELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_trusted FROM sys.check_constraints;
परिणाम:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 0 | | ConstraintTest | chkValidEndDate | 0 | 0 | | ConstraintTest | chkTeamSize | 0 | 0 | | Occupation | chkJobTitle | 0 | 0 | +----------------+-----------------+---------------+------------------+
ConstraintTest . के लिए सभी तीन बाधाएं तालिका अब सक्षम और विश्वसनीय है।
उन पर भरोसा किया जाता है क्योंकि मैंने WITH CHECK
का उपयोग किया है मेरे बयान में। अगर मैं नहीं होता, तो मुझे एक अलग परिणाम मिलता, जैसा कि आप नीचे देखेंगे।
WITH CHECK
. का उपयोग करके , मैं यह सुनिश्चित कर सकता हूं कि तालिका में मौजूद कोई भी डेटा वास्तव में बाधाओं के अनुरूप है।
उदाहरण 3 - NOCHECK के साथ उपयोग करने वाली बाधाओं को सक्षम करें
अब मैं WITH CHECK
. का उपयोग करके बाधाओं को फिर से सक्षम करूंगा इसलिए हम देख सकते हैं कि यह परिणाम को कैसे प्रभावित करता है।
लेकिन पहले मुझे उन्हें अक्षम करना होगा:
ALTER TABLE ConstraintTest NOCHECK CONSTRAINT ALL;
जांचें कि वे अक्षम हैं:
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys UNION SELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_trusted FROM sys.check_constraints;
परिणाम:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 1 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | ConstraintTest | chkTeamSize | 1 | 1 | | Occupation | chkJobTitle | 0 | 0 | +----------------+-----------------+---------------+------------------+
इसलिए वे एक बार फिर अक्षम हो गए हैं।
अब WITH NOCHECK
. का उपयोग करके उन्हें फिर से सक्षम करें :
ALTER TABLE ConstraintTest WITH NOCHECK CHECK CONSTRAINT ALL;
दोबारा जांचें:
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys UNION SELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_trusted FROM sys.check_constraints;
परिणाम:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 1 | | ConstraintTest | chkValidEndDate | 0 | 1 | | ConstraintTest | chkTeamSize | 0 | 1 | | Occupation | chkJobTitle | 0 | 0 | +----------------+-----------------+---------------+------------------+
हम देख सकते हैं कि बाधाओं को सफलतापूर्वक सक्षम कर दिया गया है, लेकिन इस बार वे अविश्वसनीय हैं।
बाधाएं अविश्वसनीय हैं क्योंकि उन्होंने सक्षम होने से पहले किसी भी मौजूदा डेटा की जांच नहीं की थी।
तो यहां मुख्य बात यह है कि, यदि आप चाहते हैं कि आपकी बाधाओं पर भरोसा किया जाए, तो WITH CHECK
का उपयोग करना सुनिश्चित करें। उन्हें सक्षम करते समय।
प्रतिबंधों को व्यक्तिगत रूप से सक्षम करना
यदि आप सभी बाधाओं को एक साथ सक्षम नहीं करना चाहते हैं, तो आप उन्हें अलग-अलग सक्षम कर सकते हैं। यह तब भी उपयोगी हो सकता है जब आपको सभी बाधाओं को सक्षम करने की आवश्यकता हो, लेकिन आपको विभिन्न सेटिंग्स का उपयोग करने की आवश्यकता है (उदाहरण के लिए WITH CHECK
कुछ के लिए और WITH NOCHECK
दूसरों के लिए)।
देखें कि SQL सर्वर में CHECK बाधा कैसे सक्षम करें और SQL सर्वर में विदेशी कुंजी कैसे सक्षम करें।