तालिका-मूल्यवान फ़ंक्शन "बस" पैरामीटर किए गए दृश्य हैं। यह उन्हें तर्क को समाहित करने के लिए बेहद शक्तिशाली बनाता है जो अन्यथा एक अपारदर्शी संग्रहीत प्रक्रिया के पीछे छिपा होगा।
इनलाइन टेबल-मान समारोह:
create function dbo.GetClients (
@clientName nvarchar(50) = null
)
returns table
return (
select *
from dbo.Clients as a
where ((a.ClientName = @clientName) or a.ClientName is null)
);
संग्रहित प्रक्रिया: यहाँ एक उदाहरण है
create procedure dbo.usp_GetClients (
@clientName nvarchar(50) = null
)
as
begin;
select *
from dbo.Clients as a
where ((a.ClientName = @clientName) or a.ClientName is null)
end;
संग्रहीत प्रक्रिया कॉल के विपरीत, एक मेज-मान समारोह मुझे लिखने देता है अन्य वस्तुओं के साथ dbo.GetClients
से तर्क:
select *
from dbo.GetClients(N'ACME') as a
join ... as b
on a.ClientId = b.ClientId
ऐसी स्थितियों में मैं संग्रहित प्रक्रिया का उपयोग करके कल्पना नहीं कर सकता क्योंकि तालिका-मूल्यवान फ़ंक्शन की तुलना में यह कितना प्रतिबंधित है। मुझे कई ऑब्जेक्ट्स के परिणामों को गठबंधन करने के लिए एक temp table, table variable, या अनुप्रयोग परत का उपयोग करके अपने आस-पास के डेटा को मार्शल करने के लिए मजबूर होना होगा।
इनलाइन टेबल-मूल्यवान फ़ंक्शंस विशेष रूप से "इनलाइन" बिट की वजह से शानदार हैं जो शायद here सर्वोत्तम रूप से समझाया गया है। यह ऑप्टिमाइज़र को ऐसे कार्यों का इलाज करने की अनुमति देता है जो वे इन वस्तुओं को अलग करते हैं, जिसके परिणामस्वरूप इष्टतम प्रदर्शन योजनाएं होती हैं (यह मानते हुए कि आपकी अनुक्रमणिका और आंकड़े आदर्श हैं)।
हालांकि मैंने करीब (बहुत व्यापक) मतदान किया, एक ऐसी स्थिति जहां आप एक टेबल मूल्यवान फ़ंक्शन चाहते हैं, जब आप एक ऐसा दृश्य चाहते हैं जो पैरामीटर ले सके। –
"स्ट्रिंग स्प्लिटर" के लिए खोजें और आप तालिका मूल्यवान फ़ंक्शन का एक बहुत ही सामान्य उपयोग देखेंगे। आप उन्हें बहुत उपयोगी चीजों को करने के लिए जुड़ने या क्रॉस लागू करने में उपयोग करते हैं। – pmbAustin
एक विभाजित कार्य के साथ-साथ सीमित मूल्यों पर भी। –