2010-09-28 15 views
33

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

उत्पादन पैरामीटर

create proc dbo.TestOutput (@InValue int, @OutValue int output) 
as 
set @OutValue = @InValue 

declare @x int 
exec TestOutput @InValue = 3, @OutValue = @x output 
select @x 

वापसी चर का उपयोग का उपयोग करना:

create proc dbo.TestReturn (@InValue int) 
as 
return @InValue 

declare @x int 
exec @x = TestReturn @InValue = 3 
select @x 

आप देख सकते हैं, वे दोनों एक ही काम करते हैं। क्या कोई मुझे एक उदाहरण दिखा सकता है जहां आउटपुट पैरामीटर की पसंद एक रिटर्न वैरिएबल बनाम एक फर्क पड़ता है?

+2

आप अपने दूसरे उदाहरण पर पुनर्विचार कर सकते हैं, जैसा कि यह कोई दिलचस्प काम करने से पहले लौटाता है;) –

+1

यह पहले उदाहरण के रूप में उतना ही काम करता है। BEGIN/END की कमी पर ध्यान दें - इनमें से प्रत्येक प्रो में एक ही कथन शामिल है। प्रत्येक उदाहरण में दूसरा ब्लॉक पहला ब्लॉक कहता है। – Timbo

उत्तर

13

मैं पसंद करते हैं:

एक वापसी मान का उपयोग करते हुए जब आप केवल एक आइटम लौटने के लिए की जरूरत है।

आउटपुट पैरामीटर का उपयोग करते समय आपको एक से अधिक मान वापस करने की आवश्यकता होती है।

एक और आम उपयोग पैटर्न, हालांकि मेरी वरीयता नहीं है, केवल वापसी या मूल्यों को सूचित करने के लिए वापसी मूल्यों का उपयोग करना है, जो किसी भी चीज के लिए वापस लौटने की आवश्यकता है।

+1

मुझे इसे संपादित करने से पहले यह उत्तर बेहतर पसंद आया। अब यह पढ़ता है "बहुत से लोग ऐसा करते हैं ... लेकिन आप इसके बजाय ऐसा कर सकते हैं"। आप एक चुनना चाहते हैं: पी – cHao

+1

बस इस पर विचार की दो मुख्य धाराएं डालना। :-) – klabranche

11

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

+1

नेस्टेड संग्रहीत प्रक्रिया कॉल से निपटने के दौरान सफलता/विफलता का संकेत देने वाले रिटर्न मूल्य बहुत उपयोगी हो सकते हैं। –

+3

मैं कहूंगा कि BEGIN TRY/BEGIN कैच और रिज़रर वापसी मानों की तुलना में अधिक उपयोगी हैं। –

8

चूंकि वापसी मान केवल int के साथ काम करते हैं, यह "असंगत" हो जाता है। मैं स्थिरता के लिए आउटपुट param पसंद करते हैं।

इसके अलावा, आउटपुट पैराम कॉलर को लौटे हुए मूल्य को पहचानने के लिए मजबूर करता है। आईएमई, वापसी मूल्य नियमित रूप से अनदेखा कर रहे हैं।

7

आपको एक प्रक्रिया से मूल्य वापस करने के लिए रिटर्न का उपयोग करना चाहिए, उसी तरह आप एक बैच स्क्रिप्ट में मान वापस करने के लिए EXIT का उपयोग करेंगे। वापसी वास्तव में पैरामीटर पास करने के लिए नहीं है, बल्कि एक प्रक्रिया या क्वेरी से बाहर निकलने का एक तरीका है। MSDN documentation के अनुसार:

प्रलेखित जब तक अन्यथा, सभी सिस्टम संग्रहित प्रक्रियाओं 0. का मान प्रदान इस सफलता को इंगित करता है और एक अशून्य मूल्य की विफलता को दर्शाता है।

एक बार जब आप अपने रिटर्न मूल्य में किसी प्रकार को परिभाषित करने की क्षमता की कमी महसूस करते हैं तो यह अधिक स्पष्ट हो जाता है। यह इंट होना चाहिए।

+0

बाहर निकलें (बैच फ़ाइल त्रुटि की तरह) एक अच्छा विचार है। मैंने ऐसे उदाहरण भी देखे हैं जो वहां पंक्ति-रेखा डालते हैं ताकि आप देख सकें कि कितनी पंक्तियां (यदि कोई हैं) प्रभावित हुईं। – Curtis

1

मैं अलग अलग तरीकों से इस सवाल का जवाब देगा:

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

दूसरा परिदृश्य: सी # में यदि आप आउटपुट पैरामीटर का उपयोग कर रहे हैं तो आपके पास प्रकार का नियंत्रण है।

तीसरा परिदृश्य: फ़ंक्शन बनाम प्रक्रिया आपकी आवश्यकताओं के अनुरूप एक का चयन करें।

आशा इस मदद करता है

0

मैं बहुत सी बातें करने के लिए दिया गया मान का उपयोग, क्योंकि यह अधिक क्रियात्मक है जैसे:

1 - आप डालने या एक आइटम बदलने जब मैं डेटाबेस में मान्यता लौटें धनात्मक संख्या करते हैं त्रुटि की संख्या के साथ पहचान और नकारात्मक वापस करने के लिए, यह तेज़ है।

2- जब मैं पेजिंग के साथ अपॉइंटमेंट करता हूं तो रिकॉर्ड की कुल राशि वापस करने के लिए तेज़ और कम महंगा होता है। बाकी के लिए मैं आउटपुट का उपयोग करता हूं जब कई रिटर्न या विभिन्न प्रकार के int होते हैं। और निश्चित रूप से मैं

की सूची लौटने के लिए रिकॉर्सेट का उपयोग करता हूं, मैं अपने प्रश्नों को पीड़ित करने के लिए डैपर का उपयोग कैसे करूं।

1

से here

  • लिया आप तो यह एक आउटपुट पैरामीटर का उपयोग करने से बेहतर है एक डेटा प्रकार के साथ एक या अधिक आइटम लौटने के लिए चाहते हैं।
  • आम तौर पर, लौटने की आवश्यकता वाले किसी भी चीज़ के लिए आउटपुट पैरामीटर का उपयोग करें।
  • जब आप केवल एक ही आइटम को केवल एक पूर्णांक डेटा प्रकार के साथ वापस करना चाहते हैं तो वापसी मूल्य का उपयोग करना बेहतर होता है।
  • आम तौर पर, वापसी मूल्य केवल संग्रहीत प्रक्रिया की सफलता या विफलता को सूचित करने के लिए होता है।
  • एक वापसी सूची आइटम 0 का मान सफलता का संकेत देता है और कोई गैर-शून्य मान विफलता इंगित करता है।
संबंधित मुद्दे