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

SQL सर्वर में एकाधिक कॉलम पर चेक बाधा कैसे बनाएं - SQL सर्वर / TSQL ट्यूटोरियल भाग 84

परिदृश्य:

आप SQL सर्वर डेवलपर के रूप में काम कर रहे हैं, आपको dbo.Customer तालिका बनाने की आवश्यकता है जिसमें प्रथम नाम, आयु और आयु प्रकार के कॉलम होने चाहिए। आप CustomerId को पहचान के रूप में जोड़ सकते हैं। आपको नीचे दिए गए तर्क के साथ आयु और आयु प्रकार के कॉलम पर चेक बाधा बनाने की आवश्यकता है


<65 Agetype="Adult" and="" p="">
अगर सही है तो रिकॉर्ड को डालने या अपडेट करने दें अन्यथा चेक बाधा के कारण विफल हो जाता है।

<65 Agetype="Adult" and="" p="">समाधान:

<65 Agetype="Adult" and="" p="">नीचे दी गई स्क्रिप्ट का उपयोग हमारी आवश्यकता के अनुसार एकाधिक कॉलम पर चेक बाधा जोड़ने के लिए किया जा सकता है।


CREATE TABLE dbo.Customer (
    CustomerId INT identity(1, 1)
    ,NAME VARCHAR(100)
    ,Age INT
    ,AgeType VARCHAR(15)
    ,CONSTRAINT dbo_Customer_AgeAndAgeType CHECK (
        (
            Age <= 17
            AND AgeType = 'Child'
            )
        OR (
            Age > 17
            AND Age < 65
            AND AgeType = 'Adult'
            )
        OR (
            Age >= 65
            AND AgeType = 'Senior'
            )
        )
    )
 
 
चलो कुछ रिकॉर्ड सम्मिलित करें और यह देखने की कोशिश करें कि क्या चेक बाधा अपेक्षा के अनुरूप काम कर रही है।


 
--Correct values accrording to Constraint
insert into dbo.Customer(Name,Age,AgeType)
Values('Najaf',13,'Child')
go

--Wrong values according to Check Constraint
insert into dbo.Customer(Name,Age,AgeType)
Values('Leena',14,'Adult')
go
--Correct values accroding to Constraint
insert into dbo.Customer(Name,Age,AgeType)
Values('Raza',30,'Adult')
go
--Wrong values according to Check Constraint
insert into dbo.Customer(Name,Age,AgeType)
Values('Aamir',30,'Senior')
go
--Wrong values according to Check Constraint
insert into dbo.Customer(Name,Age,AgeType)
Values('John',65,'Adult')
go
--Correct values accroding to Constraint
insert into dbo.Customer(Name,Age,AgeType)
Values('Kris',65,'Senior')
go


(1 पंक्ति(पंक्ति) प्रभावित)
संदेश 547, स्तर 16, राज्य 0, पंक्ति 25
INSERT कथन CHECK बाधा "dbo_Customer_AgeAndAgeType" के विपरीत है। डेटाबेस "YourDatabaseName", तालिका "dbo.Customer" में विरोध हुआ।
विवरण समाप्त कर दिया गया है।

(1 पंक्ति(पंक्ति) प्रभावित)
संदेश 547, स्तर 16, राज्य 0, लाइन 33
INSERT कथन CHECK बाधा "dbo_Customer_AgeAndAgeType" के विपरीत है। डेटाबेस "YourDatabaseName", तालिका "dbo.Customer" में विरोध हुआ।
विवरण को समाप्त कर दिया गया है।
Msg 547, Level 16, State 0, Line 37
INSERT कथन का विरोध किया गया जाँच बाधा "dbo_Customer_AgeAndAgeType"। डेटाबेस "YourDatabaseName", तालिका "dbo.Customer" में विरोध हुआ।
विवरण समाप्त कर दिया गया है।

(1 पंक्ति(पंक्ति) प्रभावित)

आइए चुनिंदा क्वेरी का उपयोग करके तालिका में डेटा की जांच करें। जैसा कि नीचे देखा जा सकता है केवल रिकॉर्ड डाले गए हैं जो चेक बाधा को पार कर गए हैं। शेष रिकॉर्ड सम्मिलित नहीं किए जा सके।
एसक्यूएल सर्वर टेबल में एकाधिक कॉलम पर चेक बाधा कैसे बनाएं

आइए रिकॉर्ड्स को अपडेट करने का प्रयास करें और देखें कि क्या चेक बाधा अपेक्षा के अनुरूप काम कर रही है।

update dbo.Customer
set Age=30
where Customerid=1


यह नीचे की त्रुटि के साथ विफल हुआ क्योंकि हमारे पास हमारे चेक बाधा तर्क के अनुसार AgeType='Child' के लिए आयु 30 नहीं हो सकती है।

Msg 547, Level 16, State 0, पंक्ति 18
अद्यतन विवरण CHECK बाधा "dbo_Customer_AgeAndAgeType" के विपरीत है। डेटाबेस "YourDatabaseName", तालिका "dbo.Customer" में विरोध हुआ।
विवरण को समाप्त कर दिया गया है।


वीडियो डेमो :कैसे करें चेक बाधा 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. tsql किसी फ़ंक्शन या स्टोर प्रक्रिया से तालिका लौटा रहा है

  2. SQL में अल्पविराम से अलग किए गए परिणाम

  3. SQL सर्वर में भौतिक दृश्य कैसे बनाएं?

  4. निर्दिष्ट नाम वाले कॉलम वाली सभी तालिकाएँ खोजें - MS SQL सर्वर

  5. SQL सर्वर की छिपी विशेषताएं