यह आलेख 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()
. का उपयोग करता है परिणामों को केवल एक पंक्ति तक सीमित करने के लिए खंड।