SQL सर्वर में, बहु-कथन तालिका-मूल्यवान फ़ंक्शन ट्रांजैक्ट-एसक्यूएल टेबल-वैल्यू फ़ंक्शन के दो प्रकारों में से एक है (दूसरा प्रकार इनलाइन टेबल-वैल्यू फ़ंक्शन है)।
तालिका-मूल्यवान फ़ंक्शन (TVF) एक प्रकार का उपयोगकर्ता-परिभाषित फ़ंक्शन है जो अपने परिणामों को तालिका के रूप में लौटाता है। इसलिए उन्हें सामान्य तालिका की तरह ही पूछताछ की जा सकती है।
मल्टी-स्टेटमेंट टीवीएफ (कभी-कभी एमएसटीवीएफ के रूप में संदर्भित) में कई स्टेटमेंट शामिल हो सकते हैं, जिसके परिणाम रिटर्न वेरिएबल में संग्रहीत होते हैं। आप फ़ंक्शन के शीर्ष पर वापसी चर के विनिर्देशों को शामिल करते हैं। यह रिटर्न टेबल की संरचना को निर्दिष्ट करता है। दूसरे शब्दों में, आप निर्दिष्ट करते हैं कि कितने कॉलम, उनके नाम, डेटा प्रकार, आदि।
यह इनलाइन टीवीएफ (जिसे आईटीवीएफ भी कहा जाता है) के विपरीत है, जो रिटर्न वेरिएबल का उपयोग नहीं करते हैं (रिटर्न टेबल SELECT द्वारा परिभाषित किया गया है। बयान)।
MSTVFs BEGIN . का भी उपयोग करते हैं /END सिंटैक्स, जो एक और चीज है जो उन्हें आईटीवीएफ से अलग करती है (आईटीवीएफ उस सिंटैक्स का उपयोग नहीं करते हैं)।
मल्टी-स्टेटमेंट टेबल-वैल्यूड फंक्शन का उदाहरण
यहाँ एक बुनियादी MSTVF का उदाहरण दिया गया है:
CREATE FUNCTION dbo.udf_PetsByName_MSTVF( @PetName varchar(70))
RETURNS @pets TABLE (
PetId varchar(20),
PetName varchar(70)
)
AS
BEGIN
INSERT INTO @pets
SELECT
CONCAT('Cat', ' ', CatId),
CatName
FROM dbo.Cats
WHERE CatName = @PetName;
INSERT INTO @pets
SELECT
CONCAT('Dog', ' ', DogId),
DogName
FROM dbo.Dogs
WHERE DogName = @PetName;
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO @pets
VALUES (
'',
'There are no pets of that name.'
)
END
RETURN;
END;
GO
यहां, मैं @pets . नामक रिटर्न वेरिएबल को परिभाषित करके फंक्शन शुरू करता हूं . यह टेबल type प्रकार का है , और यह दो कॉलम लौटाएगा।
इस मामले में मेरे पास दो हैं SELECT कथन और एक IF बयान। प्रत्येक के परिणाम रिटर्न वेरिएबल में संग्रहीत होते हैं। यह एक INSERT . के माध्यम से किया जाता है हर बार बयान।
फ़ंक्शन विकल्प
आप यह भी निर्दिष्ट कर सकते हैं कि स्कीमा बाइंडिंग का उपयोग करना है या नहीं (आपको शायद करना चाहिए), और फ़ंक्शन को एन्क्रिप्ट करना है या नहीं।
स्कीमा बाइंडिंग अंतर्निहित ऑब्जेक्ट्स में किए जा रहे किसी भी प्रतिकूल परिवर्तन को रोक देगा, जिस पर फ़ंक्शन निर्भर करता है (जैसे कि तालिका छोड़ना, कॉलम बदलना, आदि)।
एन्क्रिप्शन फ़ंक्शन की परिभाषा को एक अस्पष्ट प्रारूप में बदल देगा (दूसरों को इसे पढ़ने में सक्षम होने से रोकने के लिए)।
ITVF में स्कीमा बाइंडिंग और एन्क्रिप्शन जोड़ने के उदाहरणों के लिए एक बहु-मूल्यवान तालिका-मूल्यवान फ़ंक्शन बनाएँ देखें।