आप SQL सर्वर में CREATE FUNCTION
का उपयोग करके एक टेबल-वैल्यू फंक्शन (TVF) बना सकते हैं। टी-एसक्यूएल सिंटैक्स।
आप इनलाइन टेबल-वैल्यू फंक्शन (आईटीवीएफ) बना रहे हैं या मल्टी-स्टेटमेंट टेबल-वैल्यूड फंक्शन (एमएसटीवीएफ) के आधार पर सिंटैक्स थोड़ा अलग है।
उदाहरण 1 - इनलाइन टेबल-वैल्यूड फंक्शन
यहां एक इनलाइन तालिका-मूल्यवान फ़ंक्शन का एक उदाहरण दिया गया है।
CREATE FUNCTION dbo.ufn_AlbumsByGenre_ITVF(@GenreId int) RETURNS TABLE AS RETURN( SELECT ar.ArtistName, al.AlbumName, g.Genre FROM Genres g INNER JOIN Albums al ON g.GenreId = al.GenreId INNER JOIN Artists ar ON al.ArtistId = ar.ArtistId WHERE g.GenreId = @GenreId ); GO
हम कह सकते हैं कि यह एक इनलाइन टेबल-वैल्यू फ़ंक्शन है, क्योंकि यह रिटर्न टेबल की संरचना को निर्दिष्ट नहीं करता है। यह बस बताता है RETURNS TABLE
, फिर SELECT
. पर निर्भर करता है रिटर्न टेबल की संरचना निर्धारित करने के लिए स्टेटमेंट।
इस मामले में, फ़ंक्शन को एक तर्क के रूप में शैली आईडी को पारित करने की आवश्यकता होती है।
स्कीमा बाइंडिंग और एन्क्रिप्शन जैसे विकल्पों को जोड़ने के उदाहरणों के लिए इनलाइन टेबल-वैल्यूड फंक्शन बनाएं देखें।
स्कीमा बाइंडिंग आमतौर पर एक अच्छा विचार है, क्योंकि यह अंतर्निहित ऑब्जेक्ट्स में किए जा रहे किसी भी प्रतिकूल परिवर्तन को रोक देगा जो फ़ंक्शन संदर्भ देता है।
उदाहरण 2 - मल्टी-स्टेटमेंट टेबल-वैल्यूड फंक्शन
यदि हम चाहते हैं कि यह एक बहु-कथन तालिका-मूल्यवान फ़ंक्शन हो, तो हम फ़ंक्शन को कैसे लिखेंगे।
CREATE FUNCTION dbo.ufn_AlbumsByGenre_MSTVF(@GenreId int) RETURNS @Albums TABLE ( ArtistName nvarchar(255), AlbumName nvarchar(255), Genre nvarchar(50) ) AS BEGIN INSERT INTO @Albums SELECT ar.ArtistName, al.AlbumName, g.Genre FROM Genres g INNER JOIN Albums al ON g.GenreId = al.GenreId INNER JOIN Artists ar ON al.ArtistId = ar.ArtistId WHERE g.GenreId = @GenreId RETURN END GO
इस मामले में, हम तालिका . प्रकार के एक चर का उपयोग करते हैं @Albums
called कहा जाता है और हम वापसी तालिका की संरचना को स्पष्ट रूप से निर्दिष्ट करते हैं। क्वेरी परिणाम उस वेरिएबल में संग्रहीत किए जाते हैं, जो तब फ़ंक्शन को लागू करने पर वापस कर दिया जाता है।
MSTVFs के लाभों में से एक यह है कि उनमें कई कथन हो सकते हैं। यहाँ इसे फिर से अंत में एक अतिरिक्त भाग के साथ जोड़ा गया है।
CREATE FUNCTION dbo.ufn_AlbumsByGenre_MSTVF(@GenreId int) RETURNS @Albums TABLE ( ArtistName nvarchar(255), AlbumName nvarchar(255), Genre nvarchar(50) ) AS BEGIN INSERT INTO @Albums SELECT ar.ArtistName, al.AlbumName, g.Genre FROM Genres g INNER JOIN Albums al ON g.GenreId = al.GenreId INNER JOIN Artists ar ON al.ArtistId = ar.ArtistId WHERE g.GenreId = @GenreId IF @@ROWCOUNT = 0 BEGIN INSERT INTO @Albums VALUES ( 'None', 'None', 'None' ) END RETURN END GO
स्कीमा बाइंडिंग और एन्क्रिप्शन जैसे विकल्पों को जोड़ने के उदाहरणों के लिए मल्टी-स्टेटमेंट टेबल-वैल्यूड फंक्शन बनाएं देखें।