पैरामीटर सत्यापन वर्तमान में SQL सर्वर में प्रक्रियात्मक तर्क की एक विशेषता नहीं है, और न्यूल न केवल एक संभावित प्रकार का डेटा सत्यापन है। एक तालिका में CHAR डेटाटाइप लंबाई लंबाई विनिर्देश है। क्या इसे भी लागू किया जाना चाहिए? और आप अपवादों को कैसे संभालेंगे? टेबल स्कीमा में अपवाद हैंडलिंग के लिए एक व्यापक, अत्यधिक विकसित और कुछ हद तक मानक-आधारित पद्धति है; लेकिन प्रक्रियात्मक तर्क के लिए नहीं, शायद इसलिए प्रक्रियात्मक तर्क को संबंध प्रणाली से परिभाषित किया गया है। दूसरी तरफ, संग्रहीत प्रक्रियाओं में पहले से ही कई घटनाओं और भाषाओं में बंधे त्रुटि घटनाओं को बढ़ाने के लिए एक मौजूदा तंत्र है। पैरामीटर पर घोषणात्मक डेटा प्रकार की बाधाओं के लिए ऐसा कोई समर्थन नहीं है। इसे जोड़ने का प्रभाव व्यापक है; विशेष रूप से, क्योंकि यह अच्छी तरह से समर्थित है, और एक्स्टेंसिबल है, बस कोड जोड़ने के लिए:
IF ISNULL(@param) THEN
raise error ....
END IF
एक संग्रहीत प्रक्रिया के संदर्भ में शून्य की अवधारणा भी नहीं अच्छी तरह से परिभाषित किया गया है विशेष रूप से एक मेज के संदर्भ या की तुलना में एक एसक्यूएल अभिव्यक्ति। और यह माइक्रोसॉफ्ट की परिभाषा नहीं है। एसक्यूएल मानकों के समूहों ने बहुत सारे वर्षों में बहुत सारे साहित्य पैदा किए हैं जो न्यूल के व्यवहार की स्थापना करते हैं और उस व्यवहार के लिए परिभाषाओं की सीमाओं को स्थापित करते हैं। और संग्रहित प्रक्रिया उनमें से एक नहीं है।
एक संग्रहित प्रक्रिया को डेटाबेस प्रदर्शन को यथासंभव कुशल बनाने के लिए जितना संभव हो उतना हल्का वजन के रूप में डिज़ाइन किया गया है। पैरामीटर के डेटाटाइप सत्यापन के लिए नहीं हैं, लेकिन संकलक को सर्वोत्तम अनुकूल क्वेरी योजना संकलित करने के लिए क्वेरी ऑप्टिमाइज़र को बेहतर जानकारी देने के लिए सक्षम करने के लिए। एक पैरामीटर पर एक पूर्ण बाधा नहीं है तर्कसंगत मान्य करने के नए उद्देश्य के लिए संकलक को अधिक जटिल बनाकर एक संपूर्ण नोटर पथ का नेतृत्व किया जाता है। और इसलिए कम कुशल और भारी।
एक कारण संग्रहीत प्रक्रियाओं को सी # कार्यों के रूप में नहीं लिखा गया है।
* "यह क्यों संभव होना चाहिए" * - उम्म्म ... क्योंकि यह 'CREATE तालिका' कथन में एक बहुत ही सामान्य रूप से उपयोग किया जाने वाला शॉर्टकट है, इसलिए * प्रक्रिया बनाने के लिए इसे * नहीं * असंगत है? एसक्यूएल सर्वर के लिए पैरामीटर कॉलम के लिए सटीक तरीके से शून्य के पैरामीटर को जांचना कितना मुश्किल होगा? –
डेटाटाइप का 'न्यूल' _is_ हिस्सा।इसके बारे में सोचें 'शून्य' बनाम 'गैर-शून्य' बनाम। एक ऐसा प्रकार है जिसमें सभी 'मानक' मान होते हैं, और इसमें एक विशेष नल केस मान भी शामिल है। दूसरे में केवल 'मानक' मान होते हैं। दो प्रकार एक ही अंतर्निहित मूल्यों पर आधारित होते हैं, लेकिन एक विशेष मामले की आपूर्ति करता है। –
नहीं NULL डेटा प्रकार का हिस्सा नहीं है। यह एक तालिका के लिए कॉलम परिभाषा का हिस्सा है। नल टाइपलेस है। आप इस तरह की अवधारणा नहीं हैं जैसे नल इंटेगर या नल वर्चर। हां, यह तालिका में कॉलम लगाने के लिए डीडीएल का हिस्सा है। तो DEFAULT है, और इसलिए सूचकांक और विदेशी कुंजी परिभाषाएं हैं। क्या हम कह रहे हैं कि संग्रहीत प्रक्रिया मानकों को टेबल कॉलम के साथ ऑर्थोगोनल माना जाना चाहिए? – dkretz