Cet article présente deux manières de renvoyer une liste de procédures stockées dans une base de données SQL Server.
Option 1 - La vue du schéma d'informations ROUTINES
Vous pouvez utiliser les ROUTINES
vue schéma d'information pour obtenir une liste de toutes les procédures stockées définies par l'utilisateur dans une base de données.
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Résultat :
+------------------+----------------------+ | ROUTINE_SCHEMA | ROUTINE_NAME | |------------------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +------------------+----------------------+
Renvoyer la définition de la procédure
Le INFORMATION_SCHEMA.ROUTINES
la vue a également un ROUTINE_DEFINITION
colonne, afin que vous puissiez facilement retourner la définition de chaque procédure stockée si nécessaire.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Option 2 - La vue du catalogue système sys.objects
Une autre façon de renvoyer une liste de procédures stockées consiste à interroger le sys.objects
vue du catalogue système.
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type = 'P';
Résultat :
+----------+----------------------+ | Schema | name | |----------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +----------+----------------------+
Le type P
est présumable pour « Procédure ».
Une autre façon de faire est de filtrer par le type_desc
colonne :
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type_desc = 'SQL_STORED_PROCEDURE';
Renvoyer la définition de la procédure
Les sys.objects
La vue n'inclut pas de colonne pour la définition de l'objet. Si vous souhaitez renvoyer la définition de chaque procédure stockée, vous pouvez la joindre avec le sys.sql_modules
vue système.
Exemple :
SELECT definition FROM sys.objects o INNER JOIN sys.sql_modules m ON o.object_id = m.object_id WHERE type = 'P';
Option 3 - La vue du catalogue sys.procedures
Les sys.procedures
la procédure stockée de catalogue contient une ligne pour chaque objet qui est une procédure quelconque, avec sys.objects.type =P, X, RF et PC.
L'exécution du code suivant renverra toutes les procédures stockées que l'utilisateur possède ou sur lesquelles l'utilisateur a reçu une autorisation.
SELECT SCHEMA_NAME(schema_id) AS [Schema], Name FROM sys.procedures;
Résultat :
+----------+----------------------+ | Schema | Name | |----------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +----------+----------------------+
Cette vue hérite du type
colonne de sys.objects
vous pouvez donc filtrer les résultats par type de procédure si vous le souhaitez.
SELECT SCHEMA_NAME(schema_id), name FROM sys.procedures WHERE type = 'P';
Dans mon cas, j'obtiens le même résultat car mes deux procédures sont de type "P".
Au cas où vous vous poseriez la question, voici ce que signifie chaque type.
- P
- Procédure stockée SQL
- X
- Procédure stockée étendue
- RF
- Procédure de filtre de réplication
- PC
- Procédure stockée d'assemblage (CLR)
Renvoyer la définition de la procédure
Les sys.procedures
La vue n'inclut pas de colonne pour la définition de l'objet. Comme avec la méthode précédente, si vous souhaitez renvoyer la définition de chaque procédure stockée, vous pouvez la joindre avec le sys.sql_modules
vue système.
Exemple :
SELECT definition FROM sys.procedures p INNER JOIN sys.sql_modules m ON p.object_id = m.object_id;