2008-10-15 3 views
6

यह शायद एक साधारण उत्तर है लेकिन मुझे यह नहीं मिल रहा है। मेरे पास पूर्णांक के कॉलम वाला एक टेबल है और मैं यह सुनिश्चित करना चाहता हूं कि जब कोई पंक्ति डाली जाए तो इस कॉलम में मान शून्य से अधिक है। मैं कोड कोड पर ऐसा कर सकता था लेकिन सोचा था कि इसे टेबल पर लागू करना सबसे अच्छा होगा।SQL सर्वर 2005 में, मानों को 0 से अधिक मानने के लिए मैं पूर्णांक के कॉलम को कैसे सेट करूं?

धन्यवाद!

मैं अपनी आखिरी टिप्पणी के साथ त्रुटि में था अब सब अच्छा है।

ALTER TABLE Table1 ADD CONSTRAINT Constraint1 CHECK (YourCol > 0) 

आप बहुत परिष्कृत की कमी भी हो सकते हैं, एकाधिक स्तंभों को शामिल:

+0

क्या आप थोड़ा सा संपादन स्पष्ट कर सकते हैं? यदि आप उस मूल्य को लिखने का प्रयास करते हैं जो बाधा का उल्लंघन करता है तो मैं सिस्टम को अपवाद उठाने की अपेक्षा करता हूं। – ConcernedOfTunbridgeWells

+0

पहला काम करने के लिए क्या हुआ? क्या आप डेटा को सम्मिलित करने का प्रयास करते समय सटीक बाधा कोड और आपके द्वारा प्राप्त त्रुटि या समस्या पोस्ट कर सकते हैं? – HLGEM

उत्तर

13

आप कॉलम पर चेक बाधा का उपयोग कर सकते हैं। IIRC इस वाक्य विन्यास को लगता है कि:

create table foo (
    [...] 
    ,Foobar int not null check (Foobar > 0) 
    [...] 
) 

के रूप में पोस्टर नीचे का कहना है (धन्यवाद Constantin), आप तालिका परिभाषा के बाहर की जांच बाधा बना सकते हैं और इसलिए यह स्पष्ट है जो स्तंभ यह पर लागू होता है है यह एक सार्थक नाम देना चाहिए ।

alter table foo 
    add constraint Foobar_NonNegative 
     check (Foobar > 0) 

आप sys.check_constraints में सिस्टम डेटा शब्दकोश से जांच की कमी के पाठ बाहर निकल सकते हैं:

select name 
     ,description 
    from sys.check_constraints 
where name = 'Foobar_NonNegative' 
+1

क्या यह सिर्फ यह जांच नहीं करेगा कि यह * से अधिक है या * शून्य के बराबर है ..? बराबर चिह्न से छुटकारा पाएं। – Galwegian

+0

अच्छी सोच 99. – ConcernedOfTunbridgeWells

+2

अनाम बाधा बाद में आपके जीवन को जटिल कर सकती है। शुरुआत से अपनी वस्तुओं का बेहतर नाम। – Constantin

5

एक डेटाबेस बाधा बनाएँ। उदाहरण के लिए:

ALTER TABLE Table1 ADD CONSTRAINT Constraint2 CHECK (StartDate<EndDate OR EndDate IS NULL) 
+0

"नॉट न करें" को न भूलें। अकेले जांच न्यूल को अस्वीकार नहीं करेगा। तो दूसरे उदाहरण में "EndDate शून्य है" अनावश्यक है। – Constantin

0

जब अपनी मेज बनाने एक CHECK स्थिर बिंदु जोड़ें

CREATE TABLE Test(
     [ID] [int] NOT NULL, 
     [MyCol] [int] NOT NULL CHECK (MyCol > 1) 
) 
0

मेरा मानना ​​है कि आप चाहते हैं तालिका फ़ील्ड में एक CONSTRAINT जोड़ने के लिए:

ALTER TABLE tableName WITH NOCHECK 
ADD CONSTRAINT constraintName CHECK (columnName > 0) 

उस वैकल्पिक NOCHECK का उपयोग बाधा को जोड़ने की अनुमति देने के लिए डेटा की मौजूदा पंक्तियों (जिसमें अमान्य डेटा हो सकता है) पर लागू होने से रोकने के लिए किया जाता है। &।

संबंधित मुद्दे