कितने संग्रहीत प्रक्रिया पैरामीटर बहुत अधिक हैं?


12

मैंने अभी SQL Server 2008 में संग्रहीत कार्यविधि लिखना शुरू किया है और इसमें 30+ पैरामीटर हैं। मैंने कभी भी ~ 10 से अधिक मापदंडों के साथ एक नहीं लिखा है, और यह मुझे सोच रहा है ... किस बिंदु पर बहुत सारे पैरामीटर हैं?

संदर्भ के लिए ... यह प्रक्रिया अनिवार्य रूप से एक पंक्ति में एक पंक्ति में सम्मिलित होगी । वहाँ भी एक समान होगा; यद्यपि कुछ छोटा; संस्करण जो एक ही तालिका पर एक अद्यतन करता है । अधिकांश कॉलम इंट और स्ट्रिंग्स ( varchar(200)) के मिश्रण के साथ अपेक्षाकृत छोटे हैं ।

क्या मुद्दे हैं; अच्छा या बुरा; बड़ी संख्या में मापदंडों के साथ एक प्रक्रिया होना और वह कौन सी सीमा है जहां मुझे अन्य पैटर्न पर विचार करना शुरू करना चाहिए?


1
बिल्कुल 'जैसा है अगर आपको कीमत पूछनी है, तो आप इसे बर्दाश्त नहीं कर सकते'। यदि आप आश्चर्य करना शुरू करते हैं कि कितने पैरामीटर बहुत अधिक हैं, तो आपके पास बहुत सारे हैं। मुख्य मुद्दा इंजन नहीं है, लेकिन आप, कोड के मानव पाठक / अनुचर हैं। तो मैं कहूंगा कि स्वचालित रूप से उत्पन्न कोड में जितना संभव हो सके ठीक है , लेकिन इसे लिखित / रखरखाव कोड में उचित रखें।
रेमस रुसानु

जवाबों:


12

मुद्दे? मैं बहस नहीं करूँगा।

  • सीमा 2100 पैरामीटर है । IIRC यह SQL2000 के बाद से 2100 हो गया है, लेकिन एक प्रलेखन त्रुटि यह 1024 का सुझाव दिया गया था।
  • यदि किसी तालिका में 1000 कॉलम हैं ( उदाहरण के लिए एक शेयरपॉइंट-एस्के स्पार्स कॉलम व्यवस्था के कारण) और आप संग्रहीत प्रक्रियाओं के माध्यम से पहुंच को लागू कर रहे हैं, तो आपके सम्मिलित खरीद में 1000 पैरामीटर हो सकते हैं। कुछ गलत नहीं है उसके साथ।
  • जब आप एक विस्तृत तालिका का सामना करते हैं तो स्कीमा की समीक्षा करने के लिए रुकें (ऐसा नहीं है कि 30 विशेष रूप से चौड़ा है)। यह उन तालिकाओं को खोजने के लिए असामान्य नहीं है जो जीवन को सामान्यीकृत करना शुरू कर देते हैं लेकिन आलस्य और / या फेकलेसनेस के माध्यम से मान्यता से परे विस्तार हुआ है।
  • यहां तक ​​कि CSV सूची या XML के रूप में मापदंडों का एक सेट पास करने पर भी संक्षेप में विचार न करें। क्वेरी ऑप्टिमाइज़र को अंधा कर देता है और बिना किसी समय या प्रयास के बहुत कम बचाता है।
  • बड़ी संख्या में मापदंडों के साथ प्रक्रिया को कॉल करने के लिए क्लाइंट कोड को क्रैंक न करें। बचाव के लिए T4 टेम्प्लेट या कोडस्मिथ जैसे कोड जनरेशन टूल ।

1
इस उत्तर के लिए धन्यवाद, यह बहुत अच्छी तरह से कहा गया था। यह मेरे सवाल का पूरी तरह से जवाब देता है। यह बहुत बुरा है कि वे "जैसे महान स्क्रैबल शब्दों के प्रयोग के लिए एक बिल्ला की जरूरत नहीं है fecklessness "
JoeGeeky

2

जो सेल्को लंबी पैरामीटर सूचियों का एक वकील है, जिसे वह इस दो-भाग लेख में विस्तार से लिखते हैं :

सबसे सरल उत्तर प्रक्रिया बॉडी के अंदर सूचियों और व्युत्पन्न तालिकाओं के निर्माण के लिए एक लंबी पैरामीटर सूची का उपयोग करना है। SQL सर्वर 2100 मापदंडों को संभाल सकता है, जो व्यावहारिक उद्देश्यों के लिए पर्याप्त से अधिक होना चाहिए। SQL सर्वर वास्तव में इस संबंध में एक wimp है; DB2; 32K मापदंडों को पारित कर सकता है। और Oracle में 64K पैरामीटर हो सकते हैं।

... लंबी पैरामीटर सूची सादे पुराने मापदंडों से बनी है, जिसका अर्थ है कि उनका उपयोग आउटपुट के साथ-साथ इनपुट के लिए भी किया जा सकता है। यह भी अनुकूलक का उपयोग करने के लिए एक बयान में निहित है।

क्या मुझे लगता है कि ये तकनीक हमेशा सबसे अच्छा समाधान होगी? बिलकूल नही। SQL में ऐसी कोई बात नहीं है। लेकिन यह देखने लायक है कि आपको उचित समस्या कब आती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.