@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
. पर है अभिव्यक्ति किसी भी . के साथ काम करती है कॉलम।