Dans SQL Server, vous pouvez utiliser les ROUTINES
Transact-SQL vue du schéma des informations système pour renvoyer une liste des procédures stockées et des fonctions dans la base de données actuelle.
Plus précisément, il renvoie une liste de toutes les procédures et fonctions stockées auxquelles l'utilisateur actuel peut accéder dans la base de données actuelle.
Vous pouvez également utiliser ROUTINES
simplement pour renvoyer des informations sur une procédure ou une fonction spécifique si nécessaire.
Pour utiliser cette vue, utilisez le nom complet de INFORMATION_SCHEMA.ROUTINES
.
Exemple 1 – Renvoyer toutes les routines
Voici un exemple rapide qui renvoie toutes les procédures et fonctions stockées dans la base de données actuelle (à laquelle l'utilisateur actuel a accès).
USE Music; SELECT ROUTINE_CATALOG, ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE FROM INFORMATION_SCHEMA.ROUTINES;
Résultat :
Changed database context to 'Music'. +-------------------+------------------+----------------------+----------------+ | ROUTINE_CATALOG | ROUTINE_SCHEMA | ROUTINE_NAME | ROUTINE_TYPE | |-------------------+------------------+----------------------+----------------| | Music | dbo | ISOweek | FUNCTION | | Music | dbo | ufn_AlbumsByGenre | FUNCTION | | Music | dbo | spAlbumsFromArtist | PROCEDURE | | Music | dbo | uspGetAlbumsByArtist | PROCEDURE | +-------------------+------------------+----------------------+----------------+ (4 rows affected)
Ces résultats me montrent qu'il y a deux fonctions et deux procédures auxquelles j'ai accès dans la base de données "Musique".
La vue renvoie un assez grand nombre de colonnes, donc dans cet exemple, j'ai réduit les colonnes à seulement quatre.
Exemple 2 - Trouver une routine spécifique
Vous pouvez également limiter les résultats à une procédure ou une fonction donnée si vous préférez.
Dans cet exemple, j'inclus toutes les colonnes. J'utilise la sortie verticale pour que vous ne soyez pas obligé de faire défiler horizontalement.
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'uspGetAlbumsByArtist';
Résultat (en utilisant la sortie verticale) :
-[ RECORD 1 ]------------------------- SPECIFIC_CATALOG | Music SPECIFIC_SCHEMA | dbo SPECIFIC_NAME | uspGetAlbumsByArtist ROUTINE_CATALOG | Music ROUTINE_SCHEMA | dbo ROUTINE_NAME | uspGetAlbumsByArtist ROUTINE_TYPE | PROCEDURE MODULE_CATALOG | NULL MODULE_SCHEMA | NULL MODULE_NAME | NULL UDT_CATALOG | NULL UDT_SCHEMA | NULL UDT_NAME | NULL DATA_TYPE | NULL CHARACTER_MAXIMUM_LENGTH | NULL CHARACTER_OCTET_LENGTH | NULL COLLATION_CATALOG | NULL COLLATION_SCHEMA | NULL COLLATION_NAME | NULL CHARACTER_SET_CATALOG | NULL CHARACTER_SET_SCHEMA | NULL CHARACTER_SET_NAME | NULL NUMERIC_PRECISION | NULL NUMERIC_PRECISION_RADIX | NULL NUMERIC_SCALE | NULL DATETIME_PRECISION | NULL INTERVAL_TYPE | NULL INTERVAL_PRECISION | NULL TYPE_UDT_CATALOG | NULL TYPE_UDT_SCHEMA | NULL TYPE_UDT_NAME | NULL SCOPE_CATALOG | NULL SCOPE_SCHEMA | NULL SCOPE_NAME | NULL MAXIMUM_CARDINALITY | NULL DTD_IDENTIFIER | NULL ROUTINE_BODY | SQL ROUTINE_DEFINITION | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS SELECT AlbumName FROM [fdec67e6a28d].[Music].[dbo].[Albums] WHERE ArtistId = @ArtistId EXTERNAL_NAME | NULL EXTERNAL_LANGUAGE | NULL PARAMETER_STYLE | NULL IS_DETERMINISTIC | NO SQL_DATA_ACCESS | MODIFIES IS_NULL_CALL | NULL SQL_PATH | NULL SCHEMA_LEVEL_ROUTINE | YES MAX_DYNAMIC_RESULT_SETS | -1 IS_USER_DEFINED_CAST | NO IS_IMPLICITLY_INVOCABLE | NO CREATED | 2019-10-26 01:11:30.677 LAST_ALTERED | 2019-10-26 03:50:42.527 (1 row affected)
Vous remarquerez que de nombreuses colonnes ont des valeurs nulles. La documentation Microsoft pour cette vue indique que beaucoup de ces colonnes retournent toujours NULL
. Il précise également que certains d'entre eux sont réservés pour une utilisation future.
Exemple 3 – Procédures de retour uniquement
Vous pouvez utiliser un WHERE
clause pour filtrer les résultats uniquement sur les procédures stockées ou uniquement sur les fonctions.
Cet exemple renvoie uniquement les procédures stockées.
SELECT ROUTINE_CATALOG, ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Résultat :
+-------------------+------------------+----------------------+----------------+ | ROUTINE_CATALOG | ROUTINE_SCHEMA | ROUTINE_NAME | ROUTINE_TYPE | |-------------------+------------------+----------------------+----------------| | Music | dbo | spAlbumsFromArtist | PROCEDURE | | Music | dbo | uspGetAlbumsByArtist | PROCEDURE | +-------------------+------------------+----------------------+----------------+ (2 rows affected)
Exemple 4 - Fonctions de retour uniquement
Cet exemple renvoie uniquement les fonctions.
SELECT ROUTINE_CATALOG, ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Résultat :
+-------------------+------------------+-------------------+----------------+ | ROUTINE_CATALOG | ROUTINE_SCHEMA | ROUTINE_NAME | ROUTINE_TYPE | |-------------------+------------------+-------------------+----------------| | Music | dbo | ISOweek | FUNCTION | | Music | dbo | ufn_AlbumsByGenre | FUNCTION | +-------------------+------------------+-------------------+----------------+ (2 rows affected)