2013-06-04 6 views
6

फ़िल्टर करना मेरे पास एक संग्रहीत प्रक्रिया है जो एकल परिणाम सेट देता है।एक संग्रहीत प्रक्रिया के परिणाम सेट

SELECT * FROM (CALL sproc()) AS sp WHERE sp.someField = 0; 

वहाँ यह करने के लिए एक रास्ता है: मैं इसे कहते हैं और जिसके परिणामस्वरूप पंक्तियां फिल्टर, की तरह कुछ करने में सक्षम होना चाहते हैं?

उत्तर

4

इसे हल करने के कुछ तरीके हैं। सबसे आसान तरीका संग्रहित प्रक्रिया को संशोधित करने के लिए आपको सीधे परिणाम सेट फ़िल्टर करने की अनुमति देगा, लेकिन मुझे लगता है कि आप ऐसा करने में असमर्थ हैं।

DECLARE @tablevar table(col1,.. 
INSERT INTO @tablevar(col1,..) exec MyStoredProc 'param1', 'param2' 

SELECT col1, col2 FROM @tablevar WHERE col1 = 'abc' 

संपादित करें:

ओल्ड: आप सबक्वेरी संपादित कर सकते हैं

आप तो करने की आवश्यकता होगी क्या इसलिए की तरह एक मेज/अस्थायी तालिका में संग्रहीत प्रक्रिया के परिणाम की दुकान है संग्रहित प्रोक: ... चयन * से MyTable कहां Col1 = @ param1 और Col2 = @

param

न्यू संग्रहित प्रोक:

.... 
SELECT 
* 
FROM 
    (SELECT 
     * 
    FROM 
     MyTable 
    WHERE 
     Col1 = @param1 AND 
     Col2 = @param2 
    ) a 
WHERE 
    Col3 = FilterRule1 

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

+1

मैंने परिणाम सेट को एसपी के भीतर एक अस्थायी तालिका में स्टोर करने का विकल्प चुना और फिर temp तालिका पूछताछ की। – Ozzyberto

+0

मुझे खुशी है कि समाधान आपके लिए काम करता है। यदि आप संग्रहीत प्रोसेस को अपडेट करने में सक्षम हैं, तो संभवत: एक अस्थायी तालिका का उपयोग किए बिना आपकी संग्रहीत प्रो को फिर से डिज़ाइन करने का एक बेहतर तरीका है, लेकिन यह इसके लायक होने से अधिक परेशानी हो सकती है। –

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