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

SQL सर्वर डेटाबेस में सभी तालिका-मूल्यवान कार्यों को सूचीबद्ध करने के 2 तरीके

यह आलेख SQL सर्वर डेटाबेस में तालिका-मान फ़ंक्शन की सूची वापस करने के दो तरीके प्रस्तुत करता है।

विकल्प 1 - रूटीन सूचना स्कीमा दृश्य

आप ROUTINES का उपयोग कर सकते हैं डेटाबेस में सभी तालिका-मूल्यवान कार्यों की सूची प्राप्त करने के लिए सूचना स्कीमा दृश्य।

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

USE Music;
SELECT 
  ROUTINE_SCHEMA,
  ROUTINE_NAME,
  ROUTINE_TYPE,
  DATA_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'FUNCTION'
AND DATA_TYPE = 'TABLE';

परिणाम:

+------------------+-------------------------+----------------+-------------+
| ROUTINE_SCHEMA   | ROUTINE_NAME            | ROUTINE_TYPE   | DATA_TYPE   |
|------------------+-------------------------+----------------+-------------|
| dbo              | ufn_AlbumsByGenre       | FUNCTION       | TABLE       |
| dbo              | ufn_AlbumsByArtist      | FUNCTION       | TABLE       |
| dbo              | ufn_AlbumsByGenre_MSTVF | FUNCTION       | TABLE       |
+------------------+-------------------------+----------------+-------------+

इस मामले में, संगीत डेटाबेस में तीन तालिका-मूल्यवान कार्य होते हैं।

ROUTINE_TYPE कॉलम रिटर्न प्रक्रिया अगर यह एक संग्रहित प्रक्रिया है और FUNCTION अगर यह एक समारोह है। DATA_TYPE कॉलम रिटर्न टेबल केवल अगर यह एक टेबल-मूल्यवान फ़ंक्शन है। इसलिए, मैं ROUTINE_TYPE को छोड़ सकता था WHERE . से कॉलम खंड, लेकिन मैंने इसे वैसे भी शामिल किया।

फ़ंक्शन की परिभाषा लौटाएं

इस दृश्य में एक ROUTINE_DEFINITION भी है कॉलम जिसमें परिभाषा है। यहां केवल एक रूटीन की परिभाषा वापस करने के लिए उपरोक्त क्वेरी को संशोधित करने का एक उदाहरण दिया गया है:

SELECT TOP(1) ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'FUNCTION'
AND DATA_TYPE = 'TABLE';

परिणाम:

+----------------------+
| ROUTINE_DEFINITION   |
|----------------------|
| 
CREATE FUNCTION [dbo].[ufn_AlbumsByGenre](@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
);                      |
+----------------------+

इस मामले में मैंने TOP() . का इस्तेमाल किया परिणामों को केवल एक पंक्ति तक सीमित करने के लिए क्लॉज, लेकिन आप TOP() को हटाकर सभी फ़ंक्शन की परिभाषा को आसानी से सूचीबद्ध कर सकते हैं खंड।

विकल्प 2 - sys.objects सिस्टम कैटलॉग व्यू

तालिका-मूल्यवान फ़ंक्शंस की सूची वापस करने का दूसरा तरीका sys.objects . को क्वेरी करना है सिस्टम कैटलॉग व्यू।

SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  name,
  type_desc
FROM sys.objects
WHERE type IN ('IF', 'TF', 'FT');

परिणाम:

+----------+-------------------------+----------------------------------+
| Schema   | name                    | type_desc                        |
|----------+-------------------------+----------------------------------|
| dbo      | ufn_AlbumsByGenre       | SQL_INLINE_TABLE_VALUED_FUNCTION |
| dbo      | ufn_AlbumsByArtist      | SQL_INLINE_TABLE_VALUED_FUNCTION |
| dbo      | ufn_AlbumsByGenre_MSTVF | SQL_TABLE_VALUED_FUNCTION        |
+----------+-------------------------+----------------------------------+

फ़ंक्शन की परिभाषा लौटाएं

आप इसमें sys.sql_modules . के साथ जुड़ सकते हैं देखें कि क्या आप परिभाषा को वापस करना चाहते हैं।

उदाहरण:

SELECT TOP(1) definition
FROM sys.objects o
INNER JOIN sys.sql_modules m 
ON o.object_id = m.object_id
WHERE type IN ('IF', 'TF', 'FT');

परिणाम:

+--------------+
| definition   |
|--------------|
| 
CREATE FUNCTION [dbo].[ufn_AlbumsByGenre](@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
);              |
+--------------+

फिर से, यह TOP() . का उपयोग करता है परिणामों को केवल एक पंक्ति तक सीमित करने के लिए खंड।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ABS () SQL सर्वर में उदाहरण

  2. SQL सर्वर में ORIGINAL_DB_NAME () कैसे काम करता है

  3. प्रति घंटे दिनांक समय की गणना द्वारा SQL सर्वर समूह?

  4. SQL सर्वर में एक अस्थायी तालिका बनाएँ

  5. महीने और साल के हिसाब से SQL ग्रुपिंग