この記事では、SQLServerデータベース内のユーザー定義関数のリストを返す2つの方法を紹介します。
オプション1-ルーチン情報スキーマビュー
ROUTINES
を使用できます データベース内のすべてのユーザー定義関数のリストを取得するための情報スキーマビュー。
このビューはストアドプロシージャと関数を返すため、WHERE
を追加する必要があります 関数だけに絞り込むための句。
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE, DATA_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
結果:
+------------------+-------------------------+----------------+-------------+ | ROUTINE_SCHEMA | ROUTINE_NAME | ROUTINE_TYPE | DATA_TYPE | |------------------+-------------------------+----------------+-------------| | dbo | ISOweek | FUNCTION | int | | dbo | ufn_AlbumsByGenre | FUNCTION | TABLE | | dbo | ufn_AlbumsByArtist | FUNCTION | TABLE | | dbo | ufn_AlbumsByGenre_MSTVF | FUNCTION | TABLE | +------------------+-------------------------+----------------+-------------+
関数の定義を返す
このビューには、ROUTINE_DEFINITION
もあります 列なので、必要に応じて各関数の定義を簡単に返すことができます。
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
オプション2–sys.objectsシステムカタログビュー
関数のリストを返す別の方法は、sys.objects
にクエリを実行することです。 システムカタログビュー。
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type IN ('AF','FN','FS','FT','IF','TF');>
結果:
+----------+-------------------------+----------------------------------+ | Schema | name | type_desc | |----------+-------------------------+----------------------------------| | dbo | ISOweek | SQL_SCALAR_FUNCTION | | dbo | ufn_AlbumsByGenre | SQL_INLINE_TABLE_VALUED_FUNCTION | | dbo | ufn_AlbumsByArtist | SQL_INLINE_TABLE_VALUED_FUNCTION | | dbo | ufn_AlbumsByGenre_MSTVF | SQL_TABLE_VALUED_FUNCTION | +----------+-------------------------+----------------------------------+
ここでは、すべての関数タイプをWHERE
に明示的に含めました。 句。
アドホッククエリを実行しているが、すべてのタイプを思い出せない場合は、次のようにすることができます。
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type_desc LIKE '%FUNCTION';
またはこれ:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE RIGHT(type_desc, 8) = 'FUNCTION';
関数の定義を返す
sys.objects
ビューには、オブジェクトの定義の列は含まれていません。各関数の定義を返したい場合は、sys.sql_modules
と結合できます。 システムビュー。
例:
SELECT definition FROM sys.objects o INNER JOIN sys.sql_modules m ON o.object_id = m.object_id WHERE type IN ('AF','FN','FS','FT','IF','TF');