जब आप किसी तालिका में डेटा दर्ज करने का प्रयास करते हैं जिसमें पूरी तरह से सक्षम CHECK
. है बाधा, आप तभी सफल होंगे जब डेटा उस बाधा का उल्लंघन नहीं करता है। यदि आप अमान्य डेटा दर्ज करने का प्रयास करते हैं, तो ऑपरेशन एक त्रुटि के साथ विफल हो जाएगा।
लेकिन क्या होगा अगर आप खुद को उस स्थिति में पाते हैं जहां आपको वास्तव में जरूरी डेटा डालें जो CHECK
. का उल्लंघन करेगा बाधा? शायद बाधा अब लागू नहीं होती है, या हो सकता है कि आपके पास एक अपवाद हो जहां एक पंक्ति को बाधा को बायपास करने की अनुमति हो। किसी भी तरह से, आप प्रतिबंध के नियमों के बाहर कुछ भी दर्ज नहीं कर पाएंगे।
यदि आप स्वयं को इस स्थिति में पाते हैं, तो आप हमेशा बाधा को अक्षम कर सकते हैं। ट्रांजैक्ट-एसक्यूएल का उपयोग करके ऐसा करने का तरीका यहां बताया गया है।
उदाहरण 1 - CHECK बाधा को अक्षम करें
एक CHECK
को अक्षम करने के लिए बाधा, NOCHECK
का उपयोग करें ALTER TABLE
. के भीतर तर्क बयान।
इस तरह:
ALTER TABLE Occupation NOCHECK CONSTRAINT chkJobTitle;
यह कोड chkJobTitle . नामक बाधा को अक्षम करता है ।
उदाहरण 2 - CHECK बाधा की समीक्षा करें
हम sys.check_constraints
. को क्वेरी कर सकते हैं सिस्टम दृश्य यह सत्यापित करने के लिए कि हमारी बाधा अक्षम कर दी गई है:
SELECT name, is_disabled, is_not_trusted, definition FROM sys.check_constraints;
परिणाम:
+-----------------+---------------+------------------+----------------------------------------+ | name | is_disabled | is_not_trusted | definition | |-----------------+---------------+------------------+----------------------------------------| | chkPrice | 0 | 0 | ([Price]>(0)) | | chkValidEndDate | 0 | 0 | ([EndDate]>=[StartDate]) | | chkTeamSize | 0 | 0 | ([TeamSize]>=(5) AND [TeamSize]<=(20)) | | chkJobTitle | 1 | 1 | ([JobTitle]<>'Digital Nomad') | +-----------------+---------------+------------------+----------------------------------------+
इस मामले में मैंने सभी CHECK
. को चुना है वर्तमान डेटाबेस से बाधाएं।
हम देख सकते हैं कि केवल यही अक्षम है (क्योंकि इसका is_disabled कॉलम 1 . पर सेट है )।
आप देख सकते हैं कि
is_not_trusted
कॉलम
1
. पर भी सेट है . यह इंगित करता है कि CHECK
सिस्टम द्वारा सभी पंक्तियों के लिए बाधा सत्यापित नहीं की गई है।
दूसरे शब्दों में, हम अब यह नहीं मान सकते हैं कि बाधा ने सभी डेटा की जाँच कर ली है। तथ्य यह है कि बाधा अक्षम है इसका मतलब है कि डेटा अब बाधा द्वारा जांचे बिना डेटाबेस में प्रवेश करने में सक्षम है। इसलिए, डेटाबेस में अमान्य डेटा मौजूद होने की संभावना मौजूद है।
यदि आपको कभी भी CHECK
. को पुन:सक्षम करने की आवश्यकता हो तो बाधा, आपके पास बाधा के विश्वास को बहाल करने का अवसर होगा (WITH CHECK
का उपयोग करके) विकल्प)। यह बाधा को सक्षम करने से पहले सभी मौजूदा पंक्तियों की जाँच करेगा।
आपके पास नहीं . का विकल्प भी होगा मौजूदा डेटा की जाँच कर रहा है, लेकिन यह केवल दुर्लभ मामलों में ही किया जाना चाहिए।
विश्वास कैसे प्रभावित होता है, इस पर निर्भर करता है कि आप बाधा को फिर से कैसे सक्षम करते हैं, इसके प्रदर्शन के लिए SQL सर्वर में CHECK बाधा को सक्षम करते समय आपको NOCHECK के बारे में क्या पता होना चाहिए।