2009-05-08 16 views
7

में बड़ी संख्या में पैरामीटर पारित करने में सबसे अच्छी विधि क्या है, मैं संग्रहीत प्रक्रिया में बड़ी संख्या में पैरामीटर को पारित करने का सबसे अच्छा तरीका क्या करने का प्रयास कर रहा हूं।SQL सर्वर

कुछ तरीकों के बारे में मैं सोच रहा था;

  1. प्रासंगिक डेटाबेस ऑब्जेक्ट्स बनाएँ, प्रत्येक आइटम के लिए एक पैरामीटर वस्तु सहित और एक XML दस्तावेज में आदेश वस्तु आह्वान

  2. दर्रा और संग्रहीत प्रक्रिया में खोल दे दिया है। (एप्लिकेशन पहले से ही उन्हें XML स्वरूप में होगा)

किसी को भी किसी भी बेहतर विचार है, तो मैं उन्हें सुनने के लिए

धन्यवाद खुला रहा हूँ।

उत्तर

3

एक्सएमएल प्रोसेसिंग बड़े पैरामीटर की संख्या को संभालने के लिए बहुत आसान है। आप अपने मानकों को एक्सएमएल में आसानी से पास कर सकते हैं और फिर अपने मान प्राप्त करने के लिए एक्सएमएल हैंडलिंग कर सकते हैं। यदि आपका डेटा पहले से ही है तो यह बेहतर होगा। नेट।

उदा।

DECLARE @WidgetsIds xml 
SET @WidgetsIds ='<Widgets><id>3</id><id>6</id><id>15</id></Widgets >' 

SELECT 
ParamValues.ID.value('.','VARCHAR(20)') 
FROM @Widgets.nodes('/widgets/id') as ParamValues(ID) 

यह 3 पंक्तियों को वापस करना चाहिए: 3, 6, 15 इसका आसान इस मूल्यों तुम बाहर की जरूरत खींच और उन्हें हेरफेर करने के लिए खोलने के लिए।

+0

इसके लिए धन्यवाद, मेरे साथ कुछ प्रश्न हैं; उदाहरण के लिए उत्पाद आईडी, उत्पादनाम, SKWNumber और विभिन्न प्रकारों को संभालने के लिए आप कई फ़ील्ड कैसे खींचते हैं। – GrumpyMonkey

+0

वास्तव में पर्याप्त जगह नहीं है इसलिए यह उदाहरण शायद बेहतर है http://www.raihaniqbal.org/blog/perform-batch-insertsupdates-in-sql-server-2005-using-xml/ – u07ch

+0

लिंक स्थानांतरित हो गया है - http : //www.raihaniqbal.net/blog/2009/04/perform-batch-insertsupdates-in-sql-server-2005-using-xml/ –

2

आप "बड़ी संख्या" के रूप में कितने पैरामीटर मानते हैं? साथ ही, संग्रहीत प्रक्रिया में इतने सारे पैरामीटर क्यों हैं? लगता है कि यह परीक्षण करने के लिए मजेदार होगा।

संग्रहीत प्रक्रिया को कॉल करने वाले कोड को पैरामीटर में पास करने के लिए आवश्यक डेटा के साथ कैसे आ जाएगा? यदि डेटा पहले से ही एक्सएमएल में उपलब्ध है, तो एक्सएमएल उन्हें पास करने का एक अच्छा तरीका हो सकता है। यदि डेटा पहले से अलग चर में उपलब्ध है, तो पैरामीटर ऑब्जेक्ट बेहतर हो सकता है।

ध्यान दें कि SQL सर्वर 2008 के साथ आपके पास डेटाटेबल को तालिका प्रकार के पैरामीटर के मान के रूप में भेजने का विकल्प है।


संपादित करें: आसान तरीका पैरामीटर

हालांकि मुझे विश्वास है कि डेटासेट से अधिक इस्तेमाल किया और गाली दी हैं स्थापित करने के लिए निम्नलिखित एक प्रक्रिया है जो संग्रहीत प्रक्रिया पैरामीटर वस्तुओं की स्थापना की और यह बहुत कर देगा है कई पैरामीटर के साथ संग्रहीत प्रक्रियाओं को कॉल करना आसान है:

  1. "नया आइटम जोड़ें" और डेटासेट चुनकर एक नया डेटासेट बनाएं। जो भी आपको पसंद है डेटासेट को नाम दें।
  2. देखें सर्वर एक्सप्लोरर आप पहले से ही इसे देख नहीं कर रहे थे, तो
  3. अगर यह पहले से ही वहाँ नहीं है जब तक आप अपने संग्रहीत प्रक्रिया
  4. खींचें डिजाइन पर संग्रहित प्रक्रिया को खोजने
  5. कनेक्शन का विस्तार करें अपने डेटाबेस से संबंध जोड़े सतह

यह आपकी संग्रहीत प्रक्रिया को कॉल करने के लिए एक विधि के साथ एक टेबल एडाप्टर बनाएगा।विधि एसक्लपैमरेटर ऑब्जेक्ट्स पर निर्भर करती है कि आधारभूत संरचना पहले से ही बनाई जाएगी। विधि एसपी पैरामीटर विधि कॉल के पैरामीटर के रूप में पारित किया जाएगा, और एसपी पैरामीटर भरने के लिए कॉल पैरामीटर का उपयोग करेगा। यह सब आपके लिए किया जाता है, और यह एक उचित तरीके से किया जाता है।

+0

बड़ी संख्या का एक उदाहरण 20 से 30 है। बड़े हिस्से के लिए संग्रहित प्रक्रिया डेटा को सम्मिलित/अद्यतन करने से पहले कुछ सत्यापन/परिवर्तन करना है। एक अन्य बिंदु जिसका मैंने उल्लेख नहीं किया है यह अब SQL सर्वर के लिए है, लेकिन इसे ओरेकल 11 जी में ले जाया जा सकता है, लेकिन यह भविष्य की चिंता है कि अगर यह कभी होता है तो मैं देखता हूं। – GrumpyMonkey

+0

मुझे नहीं पता, शायद मुझे सिर्फ, लेकिन मुझे नहीं लगता कि 20 से 30 इतना बड़ा है कि आपको उन्हें पारित करने के गैर-मानक तरीकों की तलाश करनी चाहिए। जब तक पैरामीटर की संख्या चर या कुछ नहीं है। –

+0

सरल उत्तर विरासत कोड है, यह एक मौजूदा अनुप्रयोग है जिसे संशोधित किया जा रहा है। हम डेटा एक्सेस लेयर बदल रहे हैं लेकिन कड़े समय के कारण इसे कुछ समय तक ठीक तरह से दोबारा ठीक नहीं किया जा सकता है। – GrumpyMonkey

2

यदि आप SQL Server 2008 में अपग्रेड कर सकते हैं, तो इस उद्देश्य के लिए बिल्कुल तालिका-मूल्यवान पैरामीटर नामक एक नई सुविधा है। इसके बारे में Books Online अनुभाग देखें।

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

.NET से, आप DataTable इंस्टेंस का उपयोग सरल कर सकते हैं और उस डेटा तालिका के अंदर पंक्तियों की मनमानी संख्याओं को पार कर सकते हैं।

मार्क

+0

अफसोस की बात है, हमें इसे SQL Server 2005 पर करना है। – GrumpyMonkey

+0

ठीक है, तो आपको निश्चित रूप से u07ch द्वारा एक्सएमएल "चाल" को देखना चाहिए - शायद यह 2005 में आपकी सबसे अच्छी शर्त है। –

2

ठीक है, यह संभावना downvoted किया जाएगा, लेकिन ... बस इतने सारे पैरामीटर पास नहीं है। भाषा में स्वाभाविक रूप से कठिन कुछ करने का तरीका खोजने का प्रयास करने के बजाय, शायद यह समझें कि यह आपको यह बताने का भाषा तरीका है कि आपको जो भी कर रहा है उसे फिर से डिजाइन करने की आवश्यकता है। जैसे कि कई कीड़े रंग का उपयोग करते हैं, "खाने के लिए" इंगित करने के लिए रंग का उपयोग करते हैं, जब आप खुद को कुछ बुनियादी कार्य करते हैं जिसके लिए कई हुप्स निष्पादित करने की आवश्यकता होती है, तो शायद आपको जो कुछ भी हो रहा है उसे पुनर्विचार करना होगा।

विशेष रूप से, मुझे लगता है कि संभवतः आपको यह पता लगाने की कोशिश करनी चाहिए कि संग्रहीत प्रक्रिया को इतने सारे पैरामीटर की आवश्यकता क्यों है; क्या आप इसे छोटी, सरल संग्रहित प्रक्रियाओं के सेट में विघटित कर सकते हैं? हो सकता है कि यदि आप उन्हें temp तालिकाओं के माध्यम से संचार कर रहे हैं, तो आप एक ही प्रभाव प्राप्त कर सकते हैं, लेकिन कम से कम ... ick।

0

एसक्यूएल सर्वर पत्रिका के फरवरी 200 9 अंक में एरे का उपयोग करने के लिए एक उत्कृष्ट लेख है (इनपुट के रूप में सरणी को संभालने के लिए अधिक विकल्प)। आलेख एक सीएलआर विभाजन यूडीएफ का उपयोग करने का वर्णन करता है। यह एसक्यूएल 2005 के साथ काम करता है क्योंकि इसमें सीएलआर एकीकरण है। मेरे यहां पोस्ट करने और समझाए जाने के लिए यह बहुत अधिक कोड है, लेकिन अगर आपके पास पत्रिका की वेबसाइट तक पहुंच है तो मैं ऐसा करने के लिए अपने फ़ंक्शन को डाउनलोड करने की अनुशंसा करता हूं। यह तेज़ और सुरुचिपूर्ण है।