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

SQL सर्वर में मल्टी-स्टेटमेंट टेबल-वैल्यूड फंक्शन्स (MSTVF) का परिचय

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 में स्कीमा बाइंडिंग और एन्क्रिप्शन जोड़ने के उदाहरणों के लिए एक बहु-मूल्यवान तालिका-मूल्यवान फ़ंक्शन बनाएँ देखें।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. बिना किसी विफलता के SQL सर्वर लेनदेन लॉग फ़ाइल को कैसे पढ़ें के लिए समाधान

  2. SQL सर्वर में अग्रणी शून्य को ट्रिम करने के लिए बेहतर तकनीकें?

  3. चालू [प्राथमिक] का क्या अर्थ है?

  4. SQL सर्वर में Msg 512 "सबक्वायरी ने 1 से अधिक मान लौटाए" को ठीक करें

  5. मैं डेटाबेस ट्रिगर को रिकर्सिंग से कैसे रोकूं?