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

SQL सर्वर (T-SQL उदाहरण) में एक CHECK बाधा को कैसे निष्क्रिय करें

जब आप किसी तालिका में डेटा दर्ज करने का प्रयास करते हैं जिसमें पूरी तरह से सक्षम 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 के बारे में क्या पता होना चाहिए।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GETDATE() SQL सर्वर में उदाहरण (T-SQL)

  2. तालिका के लिए स्तंभ जानकारी प्राप्त करें या SQL सर्वर में देखें (T-SQL:sp_columns)

  3. SSMS का उपयोग करके SQL सर्वर एजेंट जॉब बनाएँ

  4. SQL सर्वर में N पंक्तियों का चयन करना

  5. SQL सर्वर में sp_help_schedule का उपयोग करना