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

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

आप सभी 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 सर्वर में विदेशी कुंजी कैसे सक्षम करें।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं SQL सर्वर XML कॉलम में किसी मान की क्वेरी कैसे कर सकता हूं?

  2. SQL सर्वर के लिए I/O प्रदर्शन का विश्लेषण

  3. SQL सर्वर 2016 मानक संस्करण के लिए हार्डवेयर का चयन और कॉन्फ़िगर करना

  4. एक अदिश चर में SQL सर्वर आउटपुट क्लॉज

  5. एक्सएमएल सर्वर एक्सएमएल प्रदर्शन अनुकूलन