SQL सर्वर में, इनलाइन तालिका-मूल्यवान फ़ंक्शन ट्रांजैक्ट-एसक्यूएल टेबल-वैल्यू फ़ंक्शन के दो प्रकारों में से एक है (दूसरा प्रकार मल्टी-स्टेटमेंट टेबल-वैल्यू फ़ंक्शन है)।
तालिका-मूल्यवान फ़ंक्शन (TVF) एक प्रकार का उपयोगकर्ता-परिभाषित फ़ंक्शन है जो अपने परिणामों को तालिका के रूप में लौटाता है। इसलिए उन्हें सामान्य तालिका की तरह ही पूछताछ की जा सकती है।
इनलाइन टीवीएफ (कभी-कभी आईटीवीएफ के रूप में संदर्भित) में संबद्ध रिटर्न वैरिएबल नहीं होते हैं। वापसी मूल्य एक SELECT
. के माध्यम से परिभाषित किया गया है बयान। यह कथन रिटर्न टेबल की संरचना को परिभाषित करता है। यह मल्टी-स्टेटमेंट टीवीएफ (जिन्हें एमएसटीवीएफ भी कहा जाता है) के विपरीत है, जिन्हें रिटर्न वेरिएबल की आवश्यकता होती है।
ITVF भी BEGIN
. का उपयोग नहीं करते हैं /END
वाक्य रचना, जो एक और चीज है जो उन्हें MSTVFs से अलग करती है।
इनलाइन टीवीएफ को अक्सर मल्टी-स्टेटमेंट टीवीएफ की तुलना में बेहतर प्रदर्शन माना जाता है, हालांकि यह इस बात पर भी निर्भर करेगा कि आप फ़ंक्शन में क्या करने का प्रयास कर रहे हैं।
इनलाइन टेबल-वैल्यूड फंक्शन का उदाहरण
यहां एक बुनियादी आईटीवीएफ का उदाहरण दिया गया है:
CREATE FUNCTION dbo.ufn_AlbumsByArtist(@ArtistId int) RETURNS TABLE AS RETURN ( SELECT al.ArtistId, al.AlbumName, g.Genre FROM dbo.Albums al INNER JOIN dbo.Artists ar ON al.ArtistId = ar.ArtistId INNER JOIN Genres g ON al.GenreId = g.GenreId WHERE al.ArtistId = @ArtistId ); GO
इसमें मूल रूप से एक SELECT
. होता है किसी अन्य कोड के अंदर लिपटे बयान। इसे विशेष रूप से एक इनलाइन . बनाने के लिए TVF, मैंने RETURNS TABLE
के साथ फंक्शन शुरू किया है , इसके बाद RETURN
. है , और एक SELECT
. के साथ समाप्त होता है कोष्ठक के अंदर कथन।
एकाधिक कथन
हालांकि इनलाइन तालिका-मूल्यवान फ़ंक्शन एकाधिक SELECT
. के लिए डिज़ाइन नहीं किए गए हैं कथन (यही MSTVFs के लिए हैं), UNION
. का उपयोग करना संभव है एकाधिक कथनों के परिणाम सेट को संयोजित करने के लिए ऑपरेटर।
उदाहरण:
CREATE FUNCTION [dbo].[udf_PetsByName_ITVF]( @PetName varchar(70)) RETURNS TABLE AS RETURN ( SELECT CONCAT('Cat', ' ', CatId) AS PetId, CatName FROM dbo.Cats WHERE CatName = @PetName UNION ALL SELECT CONCAT('Dog', ' ', DogId) AS PetId, DogName FROM dbo.Dogs WHERE DogName = @PetName ); GO
फ़ंक्शन विकल्प
आप यह भी निर्दिष्ट कर सकते हैं कि स्कीमा बाइंडिंग का उपयोग करना है या नहीं (आपको शायद करना चाहिए), और फ़ंक्शन को एन्क्रिप्ट करना है या नहीं।
स्कीमा बाइंडिंग अंतर्निहित ऑब्जेक्ट्स में किए जा रहे किसी भी प्रतिकूल परिवर्तन को रोक देगा, जिस पर फ़ंक्शन निर्भर करता है (जैसे कि तालिका छोड़ना, कॉलम बदलना, आदि)।
एन्क्रिप्शन फ़ंक्शन की परिभाषा को एक अस्पष्ट प्रारूप में बदल देगा (दूसरों को इसे पढ़ने में सक्षम होने से रोकने के लिए)।
ITVF में स्कीमा बाइंडिंग और एन्क्रिप्शन जोड़ने के उदाहरणों के लिए इनलाइन टेबल-वैल्यूड फंक्शन बनाएं देखें।