この記事では、SQLServerデータベース内のテーブル値関数のリストを返す2つの方法を紹介します。
オプション1-ルーチン情報スキーマビュー
ROUTINES
を使用できます データベース内のすべてのテーブル値関数のリストを取得するための情報スキーマビュー。
このビューは、現在のデータベースの現在のユーザーがアクセスできるストアドプロシージャと関数ごとに1行を返します。これには、テーブル値関数ではないルーチンが含まれる可能性があるため、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 | +------------------+-------------------------+----------------+-------------+
この場合、 音楽 データベースには、3つのテーブル値関数が含まれています。
ROUTINE_TYPE
列は
PROCEDURE
を返します ストアドプロシージャおよび
FUNCTION
の場合 関数の場合。 DATA_TYPE
列は
TABLE
を返します テーブル値関数の場合のみ。したがって、ROUTINE_TYPE
を省略できたはずです。 WHERE
の列 条項ですが、とにかく含めました。
関数の定義を返す
このビューには、ROUTINE_DEFINITION
もあります 定義を含む列。上記のクエリを変更して、1つのルーチンの定義を返す例を次に示します。
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()
を使用しました 結果を1行だけに制限する句ですが、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行だけに制限する句。