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

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

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. देखें कि क्या तालिका में OBJECTPROPERTY () का उपयोग करके SQL सर्वर में एक डिफ़ॉल्ट बाधा है

  2. SQL सर्वर में दशमलव स्थानों को छोटा करें (गोल नहीं)

  3. SQL सर्वर प्रतीक्षा ईवेंट -3

  4. SQL प्रदर्शन ट्यूनिंग सबसे महत्वपूर्ण डेटाबेस प्रबंधन कौशल क्यों है

  5. मैं अपने प्रोजेक्ट में जोड़े गए SQL सर्वर एक्सप्रेस डेटाबेस में उपयोगकर्ता कैसे बना सकता हूं?