आप सभी CHECK
. को अक्षम करने के लिए नीचे दिए गए कोड का उपयोग कर सकते हैं और SQL सर्वर में वर्तमान डेटाबेस के लिए विदेशी कुंजी बाधाएं।
EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
यह माइक्रोसॉफ्ट के अनिर्दिष्ट sp_MSforeachtable
. का उपयोग करता है संग्रहीत प्रक्रिया। यह प्रक्रिया आपको डेटाबेस में प्रत्येक तालिका के विरुद्ध कार्य करने की अनुमति देती है। तो यह हमारे काम के लिए एकदम सही है - सभी CHECK
. को अक्षम करने के लिए मौजूदा डेटाबेस के भीतर बाधाएं।
नीचे एक उदाहरण दिया गया है जहां मैं यह करता हूं और फिर परिणाम की जांच करता हूं।
उदाहरण 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 | 0 | 0 | | ConstraintTest | chkValidEndDate | 0 | 0 | | ConstraintTest | chkTeamSize | 0 | 0 | | Occupation | chkJobTitle | 0 | 0 | +----------------+-----------------+---------------+------------------+
तो वर्तमान में चार हैं CHECK
दो अलग-अलग तालिकाओं के लिए डेटाबेस में बाधाएं।
हम देख सकते हैं कि सभी बाधाएं सक्षम हैं क्योंकि is_disabled 0 . पर सेट है ।
उदाहरण 2 - बाधाओं को अक्षम करें
अब मैं सभी बाधाओं को अक्षम कर दूंगा:
EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
आमतौर पर यह सुनिश्चित करना एक अच्छा विचार है कि आप इस तरह की चीजें करते समय सही डेटाबेस का उपयोग कर रहे हैं। इसलिए हम स्पष्ट रूप से सही डेटाबेस में स्विच करके उपरोक्त कोड में जोड़ सकते हैं:
USE Test; EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
इस मामले में मैं Test . नामक डेटाबेस पर स्विच करता हूं ।
उदाहरण 3 - परिणाम जांचें
उपरोक्त कोड चलाने के बाद, अब मैं परिणाम देखने के लिए पहले उदाहरण से वही क्वेरी चलाऊंगा।
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 | 1 | 1 | +----------------+-----------------+---------------+------------------+
इसलिए डेटाबेस में सभी बाधाओं को अक्षम कर दिया गया है (क्योंकि is_disabled कॉलम 1 . पर सेट है उन बाधाओं के लिए)।
ध्यान दें कि is_not_trusted कॉलम 1 . पर भी सेट है . यह एक महत्वपूर्ण विचार है, खासकर यदि आप अपनी किसी भी अक्षम बाधा को फिर से सक्षम करना चाहते हैं।
अपनी बाधाओं को पुन:सक्षम करते समय विश्वास को पुनर्स्थापित करने के तरीके के बारे में जानकारी के लिए SQL सर्वर में चेक बाधा को सक्षम करते समय आपको NOCHECK के बारे में क्या पता होना चाहिए देखें। उस लेख की जानकारी विदेशी कुंजियों पर भी लागू होती है।
प्रतिबंधों को अलग-अलग अक्षम करें
यदि आप केवल एक-एक करके बाधाओं को अक्षम करना चाहते हैं, तो उदाहरण के लिए SQL सर्वर में एक CHECK बाधा को कैसे अक्षम करें देखें।