2010-12-28 16 views
5

मैं मौजूदा एएसपी.NET प्रोजेक्ट में सुविधाओं को जोड़ रहा हूं। कोड किसी विशेष तालिका में पंक्ति जोड़ने के लिए संग्रहीत प्रक्रिया को कॉल करता है। मुझे कॉलम में से एक को कई मान रखने की अनुमति देने की भी आवश्यकता है, इस मामले में उस कॉलम में प्रत्येक मान के लिए एक पंक्ति जोड़ा जाएगा।एकाधिक पंक्तियां डालने का सर्वोत्तम तरीका (ADO.NET)

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

ध्यान दें कि एकाधिक मान टेक्स्टबॉक्स में एकाधिक पंक्तियों के रूप में संग्रहीत किए जाएंगे, प्रति पंक्ति एक पंक्ति, और स्पष्ट रूप से सही ढंग से दर्ज होने के लिए जांच की जानी चाहिए।

क्या इस दृष्टिकोण के लिए कोई आसान तरीका है?

+0

+1 - मुझे इस प्रश्न के उत्तर में भी रुचि है –

+0

SQL सर्वर का कौन सा संस्करण कृपया? जवाब 2000 से 2005 तक 2008 तक भिन्न हो सकता है ... – gbn

+0

मैं सर्वर पर जो भी उपयोग कर रहा हूं उस पर 100% स्पष्ट नहीं हूं। तो शायद मैं 2005 के बाद आने वाले विशिष्ट कुछ भी लक्षित नहीं करना चाहूंगा। –

उत्तर

2

एसक्यूएल सर्वर 2008 है "टेबल प्रकार" पैरामीटर जो एकाधिक पंक्तियों को पैरामीटर के रूप में अनुमति देता है। एक उदाहरण this SO question

SQL सर्वर 2005+ में अच्छा XML हैंडलिंग है। हम वर्तमान में छोटे डेटासेट के लिए इसका उपयोग करते हैं। एसक्यूएल सर्वर 2000 एक्सएमएल हैंडलिंग उतना अच्छा नहीं है।

सभी संस्करणों के लिए, आप एक temp तालिका बना सकते हैं फिर एक संग्रहित प्रो को कॉल करें जो इस तालिका का उपयोग करता है। आप टेबल लोड करने के लिए SQLBulkCopy का उपयोग कर सकते हैं। कई पंक्तियों के लिए उपयोगी।

आम तौर पर, समस्या एक आम है। Erland Sommarskog का एक लेख "Arrays and Lists in SQL Server 2005 and Beyond" है जो इस विषय पर निश्चित लेखों में से एक है (उसके पास अधिक है)।

सारांश:

  • तालिका प्रकार (SQL सर्वर 2008 +)
  • एक्सएमएल
  • अस्थायी तालिका (सभी संस्करणों)
+0

दिलचस्प। मैं अभी से कूदना चाहता हूं उससे थोड़ा अधिक हो सकता है। –

0

क्या कुछ इस तरह के बारे में: here से

INSERT INTO MyTable (FirstCol, SecondCol) 
SELECT 'First' ,1 
UNION ALL 
SELECT 'Second' ,2 
UNION ALL 
SELECT 'Third' ,3 
UNION ALL 
SELECT 'Fourth' ,4 
UNION ALL 
SELECT 'Fifth' ,5 

चोरी।

आप एसक्यूएल सर्वर 2008 का उपयोग कर रहे हैं, तो आप इस विधि का उपयोग कर सकते हैं:

INSERT INTO MyTable (FirstCol, SecondCol) 
VALUES('First' ,1) 
VALUES('Second' ,2) 
VALUES('Third' ,3) 
VALUES('Fourth' ,4) 
नहीं

सुनिश्चित करें कि आप यह कैसे हो सकता है के माध्यम से एक संग्रहीत proc के साथ काम करने ...

+0

धन्यवाद लेकिन मुझे यह संग्रहीत प्रक्रिया के साथ संगत नहीं दिख रहा है। ऊपर दिया गया कोड आगे जानता है कि कितने मूल्य डालने हैं, और इसलिए ग्राहक अंत में प्रदर्शन करने की आवश्यकता होगी। –

+0

मुझे नहीं लगता कि आप एक संग्रहित प्रो के साथ जो भी चाहते हैं वह कर सकते हैं, जब तक कि आप 'EXEC sp_MyProc' बार-बार नहीं करते। आपको उपरोक्त विधि का उपयोग करने के लिए किए गए आवेषणों की संख्या जानने की आवश्यकता नहीं है यदि आप SQL कथन बनाने के लिए लूप का उपयोग करते हैं जो निष्पादित किया जाएगा। यदि आप SQL कथन बनाने के लिए लूप का उपयोग करते हैं तो बहुत सावधान रहें कि आप SQL इंजेक्शन के लिए स्वयं को नहीं छोड़ रहे हैं। –

0

मैं समाप्त हो गया (SQL सर्वर 2005+ के साथ आसान) संग्रहीत प्रक्रिया तर्कों में से एक के रूप में एक सीमांकित स्ट्रिंग भेजना, और फिर स्ट्रिंग से प्रत्येक तत्व को पार्स करना और प्रत्येक के लिए एक पंक्ति जोड़ना।

मुझे यकीन नहीं है कि यह पूरा करने का यह सबसे अच्छा तरीका है, लेकिन इसे मौजूदा कोड को फिर से पूरा करने की आवश्यकता नहीं थी और ऐसा लगता है कि यह मेरे लिए काफी कुशल होना चाहिए।

+0

यह वास्तव में मेरे आलेख लिंक – gbn

+0

में वर्णित है, उनमें से कम से कम एक लेख बहुत लंबा था। क्या आप किस लिंक के बारे में थोड़ा और विशिष्ट हो सकते हैं? धन्यवाद। –

+0

"एसक्यूएल सर्वर 2005 और परे में Arrays और सूचियां"। यह लंबा है क्योंकि यह एक जटिल विषय है – gbn

0

एसक्यूएलकल्क कॉपी देखें, यह आपको सीधे डाटाबेस में अपने डेटाटेबल में जाने की अनुमति देगा।

संबंधित मुद्दे