यह आलेख दर्शाता है कि CHECK
कैसे जोड़ें मौजूदा तालिका के लिए बाधा।
आप ALTER TABLE
. का उपयोग करके मौजूदा तालिका में एक बाधा जोड़ सकते हैं ADD CONSTRAINT
. के साथ स्टेटमेंट बहस। नीचे दिए गए उदाहरण।
उदाहरण 1 - तालिका बनाएं
सबसे पहले, एक टेबल बनाते हैं जिसके लिए हम CHECK
जोड़ेंगे बाधा।
CREATE TABLE Event ( EventId int IDENTITY(1,1) NOT NULL PRIMARY KEY, EventName varchar(255) NOT NULL, StartDate date NOT NULL, EndDate date NOT NULL, Price smallmoney NOT NULL );
उदाहरण 2 - एक कॉलम-स्तर की बाधा जोड़ें
अब एक CHECK
जोड़ें
कीमत
के लिए बाधा कॉलम।
ALTER TABLE Event ADD CONSTRAINT chkPrice CHECK (Price > 0);
यह बाधा सुनिश्चित करेगी कि कीमत हमेशा शून्य से अधिक हो।
अब जब बाधा जोड़ दी गई है, तो यहां बताया गया है कि अगर हम अमान्य डेटा डालने का प्रयास करते हैं तो क्या होता है:
INSERT INTO Event ( EventName, StartDate, EndDate, Price ) VALUES ( 'ICCC 2020', '2020-01-01', '2020-02-02', 0 );
परिणाम:
Msg 547, Level 16, State 0, Line 1 The INSERT statement conflicted with the CHECK constraint "chkPrice". The conflict occurred in database "EMS", table "dbo.Event", column 'Price'.
इस मामले में, CHECK
बाधा निर्दिष्ट करती है कि Price
. में सभी डेटा कॉलम 0 से बड़ा होना चाहिए। दूसरे शब्दों में, कीमत शून्य नहीं हो सकती और यह नकारात्मक नहीं हो सकती।
इसे स्तंभ-स्तर की बाधा . के रूप में संदर्भित किया जाता है , क्योंकि यह एक ही कॉलम पर परिभाषित है। यह एक कॉलम में डेटा पर लागू होता है।
उदाहरण 3 - तालिका-स्तर की बाधा जोड़ें
अब एक टेबल-लेवल CHECK
जोड़ें बाधा यह दो कॉलम में डेटा की जांच करेगा।
ALTER TABLE Event ADD CONSTRAINT chkEndDate CHECK (EndDate >= StartDate);
इस मामले में मैं यह सुनिश्चित करने के लिए एक बाधा जोड़ता हूं कि समाप्ति तिथि प्रारंभ तिथि से पहले कभी नहीं हो सकती है। यह दो स्तंभों में डेटा की जाँच कर रहा है और इसलिए एक तालिका-स्तर की बाधा है।
अमान्य मान डालने का प्रयास करें:
INSERT INTO Event ( EventName, StartDate, EndDate, Price ) VALUES ( 'ICCC 2020', '2020-01-01', '1970-02-02', 150.00 );
परिणाम:
Msg 547, Level 16, State 0, Line 1 The INSERT statement conflicted with the CHECK constraint "chkEndDate". The conflict occurred in database "EMS", table "dbo.Event".
जैसा कि अपेक्षित था, कार्रवाई विफल हो जाती है, क्योंकि मेरी समाप्ति तिथि प्रारंभ तिथि से पहले की है।
ध्यान दें कि इस बाधा का परीक्षण करने के लिए, मुझे पिछली बाधा को पहले ट्रिगर होने से रोकने के लिए मूल्य को एक वैध मूल्य तक बढ़ाना पड़ा (CHECK
बाधाओं को उनके बनाए जाने के क्रम में मान्य किया जाता है)।
उदाहरण 4 - प्रतिबंध के अनुरूप डेटा सफलतापूर्वक सम्मिलित करना
एक पंक्ति को सफलतापूर्वक सम्मिलित करने के लिए, हमें केवल यह सुनिश्चित करना है कि हम मान्य मान सम्मिलित कर रहे हैं।
उदाहरण:
INSERT INTO Event ( EventName, StartDate, EndDate, Price ) VALUES ( 'ICCC 2020', '2020-01-01', '2020-02-02', 150.00 ); SELECT * FROM Event;
परिणाम:
+-----------+-------------+-------------+------------+----------+ | EventId | EventName | StartDate | EndDate | Price | |-----------+-------------+-------------+------------+----------| | 4 | ICCC 2020 | 2020-01-01 | 2020-02-02 | 150.0000 | +-----------+-------------+-------------+------------+----------+
ध्यान दें कि
EventId
कॉलम पहले ही बढ़कर 4 हो गया है। ऐसा इसलिए है क्योंकि यह एक IDENTITY
है कॉलम। IDENTITY
के बारे में याद रखने वाली एक महत्वपूर्ण बात कॉलम यह है कि वे तब भी बढ़ते हैं जब कोई बाधा INSERT
. का कारण बनती है ऑपरेशन विफल होना।
जांच प्रतिबंधों के कुछ प्रतिबंध
CHECK
. के साथ काम करते समय ध्यान रखने योग्य कुछ प्रतिबंध यहां दिए गए हैं बाधाएं:
- खोज स्थिति का मूल्यांकन एक बूलियन व्यंजक से होना चाहिए और किसी अन्य तालिका का संदर्भ नहीं दे सकता।
- अभिव्यक्ति में उपनाम डेटा प्रकार नहीं हो सकते।
CHECK
बाधाओं को पाठ . पर परिभाषित नहीं किया जा सकता है , ntext , या छवि कॉलम।