Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

3 modi per elencare tutte le stored procedure in un database di SQL Server

Questo articolo presenta due modi per restituire un elenco di stored procedure in un database di SQL Server.

Opzione 1 – Visualizzazione dello schema delle informazioni ROUTINE

Puoi usare le ROUTINES vista schema di informazioni per ottenere un elenco di tutte le procedure memorizzate definite dall'utente in un database.

USE Music;
SELECT 
  ROUTINE_SCHEMA,
  ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE';

Risultato:

+------------------+----------------------+
| ROUTINE_SCHEMA   | ROUTINE_NAME         |
|------------------+----------------------|
| dbo              | spAlbumsFromArtist   |
| dbo              | uspGetAlbumsByArtist |
+------------------+----------------------+

Restituire la definizione della procedura

Il INFORMATION_SCHEMA.ROUTINES la vista ha anche un ROUTINE_DEFINITION colonna, in modo da poter restituire facilmente la definizione di ciascuna stored procedure, se necessario.

SELECT ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE';

Opzione 2 – La vista del catalogo di sistema sys.objects

Un altro modo per restituire un elenco di stored procedure consiste nell'interrogare sys.objects vista catalogo di sistema.

SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  name
FROM sys.objects
WHERE type = 'P';

Risultato:

+----------+----------------------+
| Schema   | name                 |
|----------+----------------------|
| dbo      | spAlbumsFromArtist   |
| dbo      | uspGetAlbumsByArtist |
+----------+----------------------+

Il tipo P è presumibile per “Procedura”.

Un altro modo per farlo è filtrare per type_desc colonna:

SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  name
FROM sys.objects
WHERE type_desc = 'SQL_STORED_PROCEDURE';

Restituire la definizione della procedura

Il sys.objects view non include una colonna per la definizione dell'oggetto. Se vuoi restituire la definizione di ciascuna stored procedure, puoi unirla con sys.sql_modules vista di sistema.

Esempio:

SELECT definition
FROM sys.objects o
INNER JOIN sys.sql_modules m 
ON o.object_id = m.object_id
WHERE type = 'P';

Opzione 3:la vista del catalogo sys.procedures

Il sys.procedures catalog stored procedure contiene una riga per ogni oggetto che è una procedura di qualche tipo, con sys.objects.type =P, X, RF e PC.

L'esecuzione del codice seguente restituirà tutte le stored procedure di proprietà dell'utente o per le quali l'utente ha ottenuto un'autorizzazione.

SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  Name
FROM sys.procedures;

Risultato:

+----------+----------------------+
| Schema   | Name                 |
|----------+----------------------|
| dbo      | spAlbumsFromArtist   |
| dbo      | uspGetAlbumsByArtist |
+----------+----------------------+

Questa vista eredita il type colonna da sys.objects quindi puoi filtrare i risultati per tipo di procedura, se lo desideri.

SELECT 
  SCHEMA_NAME(schema_id),
  name
FROM sys.procedures
WHERE type = 'P';

Nel mio caso, ottengo lo stesso risultato perché entrambe le mie procedure sono di tipo “P”.

Nel caso ve lo stiate chiedendo, ecco cosa significa ogni tipo.

P
Procedura archiviata SQL
X
Procedura memorizzata estesa
RF
Procedura-filtro-replica
PC
Procedura memorizzata di assemblaggio (CLR)

Restituire la definizione della procedura

Il sys.procedures view non include una colonna per la definizione dell'oggetto. Come con il metodo precedente, se vuoi restituire la definizione di ciascuna stored procedure, puoi unirla con sys.sql_modules vista di sistema.

Esempio:

SELECT definition
FROM sys.procedures p
INNER JOIN sys.sql_modules m 
ON p.object_id = m.object_id;