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