तालिका-मूल्यवान फ़ंक्शन "बस" पैरामीटरयुक्त दृश्य हैं। यह उन्हें तर्क को समाहित करने के लिए बेहद शक्तिशाली बनाता है जो अन्यथा एक अपारदर्शी संग्रहीत प्रक्रिया के पीछे छिपा होगा। यहां एक उदाहरण दिया गया है:
इनलाइन तालिका-मूल्यवान फ़ंक्शन:
create function dbo.GetClients (
@clientName nvarchar(max) = 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(max) = 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
ऐसी स्थितियों में मैं संग्रहीत कार्यविधि का उपयोग करने की कल्पना नहीं कर सकता क्योंकि तालिका-मूल्यवान फ़ंक्शन की तुलना में यह कितना प्रतिबंधात्मक है। एकाधिक ऑब्जेक्ट्स से परिणामों को संयोजित करने के लिए मुझे एक अस्थायी तालिका, तालिका चर, या एप्लिकेशन परत का उपयोग करके अपने आस-पास के डेटा को मार्शल करने के लिए मजबूर होना पड़ेगा।
इनलाइन तालिका-मूल्यवान फ़ंक्शंस "इनलाइन" बिट के कारण विशेष रूप से भयानक हैं जो शायद यहां सबसे अच्छी तरह से समझाया गया है। यह ऑप्टिमाइज़र को इस तरह के कार्यों को उन वस्तुओं की तुलना में अलग तरीके से व्यवहार करने की अनुमति देता है जो वे इनकैप्सुलेट करते हैं, जिसके परिणामस्वरूप लगभग इष्टतम प्रदर्शन योजनाएं होती हैं (यह मानते हुए कि आपकी अनुक्रमणिका और आंकड़े आदर्श हैं)।