Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में डेटाबेस में सभी चेक और विदेशी कुंजी बाधाओं को कैसे अक्षम करें (टी-एसक्यूएल उदाहरण)

आप सभी 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 बाधा को कैसे अक्षम करें देखें।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं डेटा के एक सेट की डीप कॉपी कैसे करूं, और सभी प्रतियों को इंगित करने के लिए FK संदर्भों को कैसे बदलूं?

  2. विभिन्न एल्गोरिदम का उपयोग करके यूयूआईडी टकराव का जोखिम

  3. SQL सर्वर में तालिका मौजूद है या नहीं, यह जांचने के 6 तरीके (T-SQL उदाहरण)

  4. सम्मिलित करें आदेश निष्पादित करें और Sql में सम्मिलित आईडी लौटाएं

  5. एकाधिक स्तंभ समुच्चय के साथ SQL सर्वर पिवट तालिका