Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Renvoyer des procédures et des fonctions stockées dans une base de données SQL Server :ROUTINES (exemples T-SQL)

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)