In dit artikel worden twee manieren beschreven om een lijst met opgeslagen procedures in een SQL Server-database te retourneren.
Optie 1 – De ROUTINES-informatieschemaweergave
U kunt de ROUTINES
. gebruiken informatieschema om een lijst te krijgen van alle door de gebruiker gedefinieerde opgeslagen procedures in een database.
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Resultaat:
+------------------+----------------------+ | ROUTINE_SCHEMA | ROUTINE_NAME | |------------------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +------------------+----------------------+
Retourneer de definitie van de procedure
De INFORMATION_SCHEMA.ROUTINES
weergave heeft ook een ROUTINE_DEFINITION
kolom, zodat u indien nodig gemakkelijk de definitie van elke opgeslagen procedure kunt retourneren.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Optie 2 – De systeemcatalogusweergave sys.objects
Een andere manier om een lijst met opgeslagen procedures te retourneren, is door de sys.objects
. op te vragen systeemcatalogusweergave.
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type = 'P';
Resultaat:
+----------+----------------------+ | Schema | name | |----------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +----------+----------------------+
Het type P
is vermoedelijk voor “Procedure”.
Een andere manier om dit te doen is filteren op de type_desc
kolom:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type_desc = 'SQL_STORED_PROCEDURE';
Retourneer de definitie van de procedure
De sys.objects
weergave bevat geen kolom voor de definitie van het object. Als u de definitie van elke opgeslagen procedure wilt retourneren, kunt u deze samenvoegen met de sys.sql_modules
systeemweergave.
Voorbeeld:
SELECT definition FROM sys.objects o INNER JOIN sys.sql_modules m ON o.object_id = m.object_id WHERE type = 'P';
Optie 3 – De sys.procedures-catalogusweergave
De sys.procedures
catalogus opgeslagen procedure bevat een rij voor elk object dat een of andere procedure is, met sys.objects.type =P, X, RF en pc.
Als u de volgende code uitvoert, worden alle opgeslagen procedures geretourneerd die de gebruiker bezit of waarvoor de gebruiker toestemming heeft gekregen.
SELECT SCHEMA_NAME(schema_id) AS [Schema], Name FROM sys.procedures;
Resultaat:
+----------+----------------------+ | Schema | Name | |----------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +----------+----------------------+
Deze weergave erft het type
kolom van sys.objects
zodat u desgewenst de resultaten kunt filteren op proceduretype.
SELECT SCHEMA_NAME(schema_id), name FROM sys.procedures WHERE type = 'P';
In mijn geval krijg ik hetzelfde resultaat omdat mijn beide procedures van het type "P" zijn.
Voor het geval je je afvraagt, hier is wat elk type betekent.
- P
- SQL-opgeslagen procedure
- X
- Uitgebreide opgeslagen procedure
- RF
- Replicatie-filter-procedure
- PC
- Assemblage (CLR) opgeslagen procedure
Retourneer de definitie van de procedure
De sys.procedures
weergave bevat geen kolom voor de definitie van het object. Net als bij de vorige methode, als u de definitie van elke opgeslagen procedure wilt retourneren, kunt u deze samenvoegen met de sys.sql_modules
systeemweergave.
Voorbeeld:
SELECT definition FROM sys.procedures p INNER JOIN sys.sql_modules m ON p.object_id = m.object_id;