Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में टेबल-वैल्यूड फंक्शन बनाएं

आप 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

स्कीमा बाइंडिंग और एन्क्रिप्शन जैसे विकल्पों को जोड़ने के उदाहरणों के लिए मल्टी-स्टेटमेंट टेबल-वैल्यूड फंक्शन बनाएं देखें।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस में आईडी फ़ील्ड के लिए INT बनाम विशिष्ट-पहचानकर्ता

  2. DATEFROMPARTS() SQL सर्वर में उदाहरण (T-SQL)

  3. सी # में एसक्लट्रांसक्शन का उपयोग कैसे करें

  4. SQL सर्वर 2019 (ज्ञात बग) में मूल रूप से संकलित संग्रहीत प्रक्रिया को निष्पादित करते समय "आंतरिक कनेक्शन घातक त्रुटि"

  5. आप डेटाबेस में विरासत का प्रतिनिधित्व कैसे कर सकते हैं?