@Igor बिल्कुल सही है और कुछ OR 'ed अभिव्यक्ति तेज और सरल हैं।
स्तंभों की लंबी सूची के लिए (a , b , c , d , e , f , g उदाहरण में), यह छोटा और उतना ही तेज़ है:
CHECK (NOT (a,b,c,d,e,f,g) IS NULL)
db<>फिडल यहाँ
पुरानी SQL Fiddle.
यह कैसे काम करता है?
उपरोक्त का अधिक क्रियात्मक रूप होगा:
CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)
ROW यहाँ बेमानी वाक्य रचना है।
ROW का परीक्षण करना IS NULL के साथ एक्सप्रेशन केवल रिपोर्ट TRUE अगर हर एक कॉलम NULL है - जो ठीक वैसा ही होता है जैसा हम बहिष्कृत करना चाहते हैं।
इस एक्सप्रेशन को केवल (a,b,c,d,e,f,g) IS NOT NULL के साथ उल्टा करना संभव नहीं है , क्योंकि यह परीक्षण करेगा कि हर एक कॉलम IS NOT NULL . है . इसके बजाय, NOT . के साथ पूरे एक्सप्रेशन को नकारें . वोइला।
मैनुअल में अधिक विवरण यहाँ और यहाँ।
प्रपत्र की अभिव्यक्ति:
CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)
वही हासिल करेगा, कम सुरुचिपूर्ण ढंग से और एक प्रमुख प्रतिबंध के साथ:केवल मिलान डेटा प्रकार के कॉलम के लिए काम करता है , जबकि चेक एक ROW . पर है अभिव्यक्ति किसी भी . के साथ काम करती है कॉलम।