2009-01-26 7 views
6

मैं संग्रहीत प्रक्रिया के आउटपुट पैरामीटर को कैसे अनदेखा कर सकता हूं? मैं प्रक्रिया को दूसरी प्रक्रिया से बुला रहा हूं, उदाहरण:क्या संग्रहीत प्रक्रिया के आउटपुट पैरा को अनदेखा करना संभव है?

DECLARE @param1 integer 

EXEC mystoredprocedure 
    @in_param_1, 
    @in_param2_, 
    @param1 OUTPUT, 
    -- what do I type here to ignore the second output param?? 

मैं टी-एसक्यूएल (एमएस एसक्यूएल 2005) का उपयोग कर रहा हूं।

उत्तर

5

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

आपके मामले में, आप यहाँ एक और उदाहरण है कि एक ही परिदृश्य के लिए ...

create proc MyTempProc 
    (@one int, 
    @two int out, 
    @three int out) 
AS 
begin 

    set @two = 2 
    set @three = 3 

    select @one as One 

end 
go 

declare @p1 int, 
     @p2 int 

set  @p1 = 1 

exec MyTempProc @p1, @p2 out, null 

print @p1 
print @p2 
0

आपको शायद मूल्य के साथ कुछ भी नहीं कर कर केवल OUTPUT param को अनदेखा करना होगा। ऐसा नहीं है कि उस चर के ओवरहेड एक मुद्दा या कुछ भी है। यहां एकमात्र मुद्दा यह है कि आपका कोड थोड़ा सा होगा। तो वहां पर एक टिप्पणी थप्पड़ बताते हुए कि OUTPUT param का उपयोग नहीं किया जा रहा है और सब कुछ ठीक होना चाहिए।

4

आउटपुट पैरामीटर को पास करने के लिए आपके पास डिफ़ॉल्ट होना आवश्यक है। नीचे

create proc x (@in int = null, @out int = null OUTPUT) 
as 
Begin 
    Select @in 
End 

exec x 1 

संपादित देखें

एक छोटे से स्पष्ट करने के लिए, त्रुटि दी जा रही है क्योंकि संग्रहीत प्रक्रिया है कि कहा जाता है की जा रही है एक पैरामीटर (इस मामले @ param1 में) में परिभाषित किया गया है, जो कोई चूक परिभषित किया। (यानी @param int = -1 की बजाय @ param1 int) उस स्थिति में जहां संग्रहीत प्रक्रिया को कॉल करते समय संग्रहीत प्रक्रिया के परिभाषित पैरामीटर के लिए पैरामीटर या डिफ़ॉल्ट निर्दिष्ट नहीं किया गया है, एक त्रुटि उत्पन्न होगी। वही बात तब होगी जब आप इनपुट पैरामीटर को छोड़ने के लिए थक गए हों जिसमें डिफ़ॉल्ट निर्दिष्ट नहीं है।

+0

वास्तव में, एसपी * की आवश्यकता है * आउटपुट होना चाहिए? यह मेरे लिए ज्यादा समझ में नहीं आता है। –

+0

हो सकता है कि पैरामीटर की दिशा के बावजूद किसी त्रुटि में डिफ़ॉल्ट परिणाम न होने वाले पैरामीटर के लिए मान निर्दिष्ट किए बिना संग्रहीत प्रक्रिया को निष्पादित करने का प्रयास करने के रूप में बेहतर कहा जाएगा। – cmsjr

+0

@MrGrieves: यह समझ में आता है, आईएमओ। निस्संदेह एक प्रक्रिया जो कुछ भी करती है वह कर सकती है, लेकिन इसे करने का कोई मतलब नहीं हो सकता है। उदाहरण के लिए, प्रक्रिया आउटपुट पैरामीटर की तुलना में कोई अन्य परिणाम नहीं हो सकता है, यानी यह किसी भी राज्य को नहीं बदलता है, बस कुछ गणना करें। (मुझे पता है, इसके लिए एक टेबल-मूल्यवान फ़ंक्शन अधिक उपयुक्त हो सकता है, और निश्चित रूप से एक स्केलर होता है यदि परिणाम स्केलर होता है। फिर भी ...) –

0

सपा आप कॉल कर रहे एक पैरामीटर अपेक्षा करता है कि के रूप में

exec mystoredproc @in_param_1, @in_param2_, @param1 OUTPUT, null 

proc फोन करता हूँ पारित होने के लिए, आपको वहां एक होना होगा। यहां तक ​​कि यदि आप इसके आउटपुट को नजरअंदाज करते हैं, तो यह एसपी की संरचना का हिस्सा है।

"डेटा अनुबंध" के रूप में पैरामीटर के बारे में सोचें। अगर वे डिफॉल्ट नहीं हैं, तो वे आवश्यक हैं। भले ही मूल्यों को नजरअंदाज कर दिया जाए।

आपको डमी मान घोषित करने के लिए मजबूर करना जो आप कभी नहीं पढ़ेंगे, उस संग्रहित प्रो को कॉल करने की लागत है जिसे आउटपुट पैरामीटर के मान का उपयोग करने की आवश्यकता होती है।