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;