तालिका को महत्वपूर्ण मान में परिवर्तनशील घोषित करें


110

मैं टेबल वैल्यू फंक्शन में वेरिएबल कैसे घोषित कर सकता हूं? (मेरे शीर्षक की तरह)


इनलाइन या मल्टी-स्टेटमेंट? जैसे MSDN उनका वर्णन करता है?
gbn

जवाबों:


205

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

यह एक चर नहीं हो सकता है:

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

33
पहला उदाहरण एक "इनलाइन टेबल-वैल्यूड फंक्शन" जो एक बहु बयान टेबल-वैल्यूड समारोह, अर्थात् डेटाबेस सर्वर कर सकते हैं की तुलना में प्रदर्शन लाभ है के रूप में जाना जाता है को संयोजित क्वेरी के साथ ITVF inlined माता पिता क्वेरी में, अनिवार्य रूप से एक parameterised बनने VIEWजबकि एक MSTVF एक अपारदर्शी संग्रहित प्रक्रिया की तरह अधिक व्यवहार करता है (हालांकि स्पार्क्स की तुलना में अपने फायदे के साथ)। MSTVF पर इनलाइन कार्यों को प्राथमिकता दी जानी चाहिए। यदि आपको मध्यवर्ती मूल्यों की गणना करने और संग्रहीत करने की आवश्यकता है (जैसे कि एक जटिल स्केलर फ़ंक्शन अभिव्यक्ति का परिणाम) तो एक सबक्वेरी का उपयोग करें।
दाई

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

1
मेरे फ़ंक्शन के लिए सबसे बड़ी लागत सम्मिलित हो रही है और मुझे नहीं पता कि टेबल चर और प्रविष्टि के चयन के परिणाम के बिना इस लागत को कैसे छोड़ना है
uzay95

@naughtilus इसका एक उदाहरण देखना बहुत अच्छा होगा। क्या आपने अपने सुझाव के साथ एक और उत्तर देने पर विचार किया है?
जैक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.