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

SQL सर्वर (T-SQL) में मौजूदा तालिका में एक CHECK बाधा जोड़ें

यह आलेख दर्शाता है कि 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 , या छवि कॉलम।

  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 सर्वर में समानार्थक शब्द का परिचय

  2. SQL सर्वर में हमेशा उपलब्ध उपलब्धता समूह को सेट अप और कॉन्फ़िगर करना

  3. टी-एसक्यूएल - एलियासिंग का उपयोग करके =बनाम के रूप में

  4. एक स्ट्रिंग में किसी विशेष वर्ण के प्रकट होने की संख्या

  5. एसक्यूएल क्वेरी जहां कॉलम ='' इमोजी अक्षर लौटा रहा है और