2009-01-28 8 views
7

के भीतर संग्रहीत प्रक्रिया का एसएसआईएस वापसी मूल्य मैं संग्रहीत डेटा को माइग्रेट कर रहा हूं जिसे पहले से मौजूद संग्रहित प्रक्रियाओं का उपयोग करके सम्मिलित किया जाना है। संग्रहीत प्रक्रियाओं में पंक्तियों के लिए एक आईडी के पैरामीटर और वापसी मूल्य (एक चयनित कथन से) होता है। एसएसआईएस में ओएलई डीबी कमांड के भीतर, मैं कॉलम मानों को पैरामीटर के रूप में पास करने वाली संग्रहीत प्रक्रिया को कॉल कर सकता हूं और मैं आमतौर पर "आईडी" आउटपुट को संभालने के लिए संग्रहीत प्रक्रिया पर आउटपुट पैरामीटर का उपयोग करता हूं; लेकिन मुझे यकीन नहीं है कि प्रक्रिया को मूल्य मान के साथ कैसे संभाला जा सकता है जब प्रक्रिया आईडी मान वापस करने के लिए चयन का उपयोग करती है। यहाँ मैं क्या इस्तेमाल किया है जो पहले से काम करता है का एक उदाहरण है, लेकिन मैं मूल्य का चयन से लौटे लेने की जरूरत है:एक ओएलई डीबी कमांड

exec dbo.uspInsertContactAddress 
@Address = ?, 
@ContactID = ?, 
@DeliveryMethodId = ?, 
@ID = ? output, 
@Version = ? output 

उत्तर

12

तरह से मैंने पाया कि मैं इस जो वास्तव में काफी आसान था कर सकता है:

exec ? = dbo.StoredProc @param = ?, @param2 = ? 

और फिर एक @RETURN_VALUE उपलब्ध गंतव्य कॉलम पर

6

बस प्रश्न चिह्न, SqlCommand संपत्ति में चर नाम का उपयोग न करें और आउटपुट पैरामीटर के लिए "आउट" या "आउटपुट" लेबल।

आउटपुट पैरामीटर मान को हथियाने के लिए चाल प्रक्रिया परिणाम को कैप्चर करने के लिए कॉलम (एक एसएसआईएस चर के लिए मैप किए गए) को पेश करने के लिए ओएलई डीबी कमांड से पहले पाइपलाइन में व्युत्पन्न कॉलम रूपांतरण डालना है।

यह देखने के तरीके के स्क्रीन कैप्स के साथ एक अच्छा अवलोकन के लिए OLEDB Command Transformation And Identity Columns देखें। पहले लिंक में उपयोग किए गए ट्रैश गंतव्य के लिए Trash Destination Adapter भी देखें। यह एक आसान उपकरण है जो इस तरह की चीजों को डीबग करने के लिए उपलब्ध है।

+0

जवाब के लिए धन्यवाद दिखाई देगी, हालांकि शायद मैं 'नहीं था मेरे प्रश्न में बिल्कुल समझाओ कि मुझे क्या करना है। उपर्युक्त कोड मैंने कामों का उपयोग किया है और यदि प्रक्रिया में आउटपुट पैरामीटर है तो मैं मूल्यों को पकड़ सकता हूं। समस्या यह है कि इस डेटाबेस के लिए उपयोग की जाने वाली प्रक्रियाओं को सिर्फ मूल्य प्राप्त करने के लिए एक चयन कहते हैं। – bobwah

+0

मुझे खेद है, मुझे यकीन नहीं है कि मुझे समस्या क्या हो रही है। क्या आप आउटपुट पैरामीटर के माध्यम से चयन के परिणाम को पारित नहीं कर रहे हैं और इसके बजाय आपको proc के परिणाम सेट को पकड़ने के लिए एक तरीका चाहिए? –

0

मैंने हमेशा सफलतापूर्वक SQL कार्य निष्पादन के भीतर पैरामीटर मैपिंग का उपयोग किया है। एसक्यूएल स्टेटमेंट "EXEC nameofstoredproc?,? OUTPUT" है, पैरामीटर एक आउटपुट होने पर पैरामीटर और OUTPUT के स्थान को निर्दिष्ट करने वाले प्रश्न चिह्नों के साथ।

आप उचित चर नाम, दिशा (इनपुट, आउटपुट, रिटर्नवैल्यू) और डेटा प्रकार के साथ मैपिंग में पैरामीटर निर्दिष्ट करते हैं। चूंकि आपकी संग्रहीत प्रक्रिया परिणाम सेट के माध्यम से इच्छित डेटा को वापस कर रही है, फिर वैरिएबल के लिए आईडी और संस्करण को रिटर्नवैल्यू के रूप में एकत्र करने के लिए दिशा निर्दिष्ट करें। यह आपके लिए ठीक काम करना चाहिए।

1

संग्रहीत प्रक्रिया एक resultset देता है, तो आप यह कब्जा करने के लिए की जरूरत है:

DECLARE @results TABLE (
    [ID] INT NOT NULL 
) 

INSERT @results ([ID]) 
EXEC dbo.uspInsertContactAddress @Address = ?, @ContactID = ?, @DeliveryMethodId = ?, @ID = ? output, @Version = ? output 

SELECT * FROM @results 

नोट: मैं एक तालिका का इस्तेमाल किया। आपको अपने SQL सर्वर संस्करण के आधार पर एक temp तालिका का उपयोग करने की आवश्यकता हो सकती है।