この記事では、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行だけに制限する句。