この記事では、SQLServerデータベースのストアドプロシージャのリストを返す2つの方法を紹介します。
オプション1-ルーチン情報スキーマビュー
ROUTINES
を使用できます データベース内のすべてのユーザー定義ストアドプロシージャのリストを取得するための情報スキーマビュー。
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
結果:
+------------------+----------------------+ | ROUTINE_SCHEMA | ROUTINE_NAME | |------------------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +------------------+----------------------+
プロシージャの定義を返す
INFORMATION_SCHEMA.ROUTINES
ビューにはROUTINE_DEFINITION
もあります 列なので、必要に応じて各ストアドプロシージャの定義を簡単に返すことができます。
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
オプション2–sys.objectsシステムカタログビュー
ストアドプロシージャのリストを返す別の方法は、sys.objects
にクエリを実行することです。 システムカタログビュー。
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type = 'P';
結果:
+----------+----------------------+ | Schema | name | |----------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +----------+----------------------+
タイプP
「手順」と推定されます。
これを行う別の方法は、type_desc
でフィルタリングすることです。 列:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type_desc = 'SQL_STORED_PROCEDURE';
プロシージャの定義を返す
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 = 'P';
オプション3–sys.proceduresカタログビュー
sys.procedures
カタログストアドプロシージャには、 sys.objects.type を使用して、ある種のプロシージャである各オブジェクトの行が含まれています。 =P、X、RF、およびPC。
次のコードを実行すると、ユーザーが所有しているか、ユーザーに何らかの権限が付与されているすべてのストアドプロシージャが返されます。
SELECT SCHEMA_NAME(schema_id) AS [Schema], Name FROM sys.procedures;
結果:
+----------+----------------------+ | Schema | name | |----------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +----------+----------------------+
このビューはtype
を継承します sys.objects
の列 したがって、必要に応じて、プロシージャタイプで結果をフィルタリングできます。
SELECT SCHEMA_NAME(schema_id), name FROM sys.procedures WHERE type = 'P';
私の場合、両方の手順が「P」タイプであるため、同じ結果が得られます。
ご参考までに、各タイプの意味は次のとおりです。
- P
- SQLストアドプロシージャ
- X
- 拡張ストアドプロシージャ
- RF
- レプリケーション-フィルター-手順
- PC
- アセンブリ(CLR)ストアドプロシージャ
プロシージャの定義を返す
sys.procedures
ビューには、オブジェクトの定義の列は含まれていません。前のメソッドと同様に、各ストアドプロシージャの定義を返す場合は、sys.sql_modules
と結合できます。 システムビュー。
例:
SELECT definition FROM sys.procedures p INNER JOIN sys.sql_modules m ON p.object_id = m.object_id;