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

3 façons de répertorier toutes les procédures stockées dans une base de données SQL Server

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;