2011-07-12 25 views
74

मैं तालिका मूल्यवान फ़ंक्शन में एक चर कैसे घोषित कर सकता हूं?तालिका मूल्यवान फ़ंक्शन में चर घोषित करें

+0

इनलाइन या बहु बयान

यह एक चर नहीं हो सकता? जैसे * एमएसडीएन * उनका वर्णन करता है? – gbn

+9

@ योगेशभाडोरा हास्यास्पद "एक खोज इंजन का उपयोग करें" प्रतिक्रिया के साथ समस्या यह है कि * यह * वह जगह है जहां खोज इंजन इंगित करता है। एक अनंत रिकर्सन स्थिति की तरह। पृष्ठ को हटाने या सिर्फ प्रश्न का उत्तर देना सबसे अच्छा है। – Volvox

+24

यह प्रश्न अधिक प्यार के हकदार है: फिर से खोलने के लिए और नीचे दिया गया उत्तर स्वीकार कर लिया गया। यह वास्तव में * एक असली सवाल है। – Askolein

उत्तर

136

तालिका मूल्यवान कार्यों के दो स्वाद हैं। एक जो सिर्फ एक चुनिंदा बयान है और एक जिसे केवल एक चुनिंदा बयान से अधिक पंक्तियां मिल सकती हैं।

create function Func() returns table 
as 
return 
select 10 as ColName 

आप इस के बजाय की तरह क्या करना है:

create function Func() 
returns @T table(ColName int) 
as 
begin 
    declare @Var int 
    set @Var = 10 
    insert into @T(ColName) values (@Var) 
    return 
end 
+1

धन्यवाद, यह बहुत उपयोगी है –

+13

पहला उदाहरण "इनलाइन टेबल-वैल्यूड फ़ंक्शन" के रूप में जाना जाता है, जिसमें मल्टी-कथन तालिका-मूल्यवान फ़ंक्शन की तुलना में प्रदर्शन लाभ होते हैं, अर्थात् डेटाबेस सर्वर * आईटीवीएफ के साथ क्वेरी * को पुनः संयोजित कर सकता है * मूलभूत क्वेरी में रेखांकित * अनिवार्य रूप से एक पैरामीटर 'VIEW' बन रहा है जबकि एक एमएसटीवीएफ एक अपारदर्शी संग्रहीत प्रक्रिया की तरह व्यवहार करता है (हालांकि स्पॉक्स की तुलना में अपने फायदे के साथ)। एमएसटीवीएफ पर इनलाइन कार्यों को प्राथमिकता दी जानी चाहिए। यदि आपको इंटरमीडिएट मानों की गणना करने और स्टोर करने की आवश्यकता है (जैसे जटिल स्केलर फ़ंक्शन अभिव्यक्ति का परिणाम) तो एक सबक्वायरी का उपयोग करें। – Dai

+0

शायद यह भी उल्लेखनीय है कि यदि आप जिस वैरिएबल को सेट करना चाहते हैं उसे पॉप्युलेट करने के लिए जो कुछ भी आप उपयोग करना चाहते हैं, उसका परिणाम किसी भी तरह से सामान्य है, तो आप इसे उत्पन्न करने के लिए एक अलग फ़ंक्शन लिखने पर विचार कर सकते हैं। इससे आपको अपने लाभ में गतिशील रूप से जेनरेट किए गए मान को डालने के दौरान उपरोक्त @Dai द्वारा वर्णित आईटीवीएफ का उपयोग करने की अनुमति मिल जाएगी। मैंने उपर्युक्त समाधान की मदद से एक फ़ंक्शन लिखा है (धन्यवाद @MikaelEriksson!) जो एमएसटीवीएफ फॉर्म का उपयोग करने के लिए मुझे बचाने के लिए एक सहायक कार्य करने के लिए अपने पैरामीटर में से एक पर गुजरता है। – naughtilus

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