Dieser Artikel stellt zwei Möglichkeiten vor, eine Liste gespeicherter Prozeduren in einer SQL Server-Datenbank zurückzugeben.
Option 1 – Die ROUTINES-Informationsschemaansicht
Sie können die ROUTINES
verwenden Informationsschemaansicht, um eine Liste aller benutzerdefinierten gespeicherten Prozeduren in einer Datenbank zu erhalten.
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Ergebnis:
+------------------+----------------------+ | ROUTINE_SCHEMA | ROUTINE_NAME | |------------------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +------------------+----------------------+
Gib die Definition des Verfahrens zurück
Die INFORMATION_SCHEMA.ROUTINES
view hat auch eine ROUTINE_DEFINITION
-Spalte, sodass Sie bei Bedarf problemlos die Definition jeder gespeicherten Prozedur zurückgeben können.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Option 2 – Die sys.objects-Systemkatalogansicht
Eine andere Möglichkeit, eine Liste gespeicherter Prozeduren zurückzugeben, besteht darin, sys.objects
abzufragen Systemkatalogansicht.
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type = 'P';
Ergebnis:
+----------+----------------------+ | Schema | name | |----------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +----------+----------------------+
Der Typ P
ist vermutlich für „Procedure“.
Eine andere Möglichkeit, dies zu tun, ist das Filtern nach type_desc
Spalte:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type_desc = 'SQL_STORED_PROCEDURE';
Gib die Definition des Verfahrens zurück
Die sys.objects
Ansicht enthält keine Spalte für die Definition des Objekts. Wenn Sie die Definition jeder gespeicherten Prozedur zurückgeben möchten, können Sie sie mit sys.sql_modules
verbinden Systemansicht.
Beispiel:
SELECT definition FROM sys.objects o INNER JOIN sys.sql_modules m ON o.object_id = m.object_id WHERE type = 'P';
Option 3 – Die sys.procedures-Katalogansicht
Die sys.procedures
Die gespeicherte Katalogprozedur enthält eine Zeile für jedes Objekt, das eine Art Prozedur ist, mit sys.objects.type =P, X, RF und PC.
Das Ausführen des folgenden Codes gibt alle gespeicherten Prozeduren zurück, die der Benutzer entweder besitzt oder für die dem Benutzer eine Berechtigung erteilt wurde.
SELECT SCHEMA_NAME(schema_id) AS [Schema], Name FROM sys.procedures;
Ergebnis:
+----------+----------------------+ | Schema | Name | |----------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +----------+----------------------+
Diese Ansicht erbt den type
Spalte aus sys.objects
Sie können die Ergebnisse also bei Bedarf nach Verfahrenstyp filtern.
SELECT SCHEMA_NAME(schema_id), name FROM sys.procedures WHERE type = 'P';
In meinem Fall erhalte ich das gleiche Ergebnis, da meine beiden Prozeduren vom Typ „P“ sind.
Falls Sie sich fragen, hier ist, was jeder Typ bedeutet.
- P
- SQL Stored Procedure
- X
- Erweiterte gespeicherte Prozedur
- RF
- Replikations-Filter-Verfahren
- PC
- Assembly (CLR) gespeicherte Prozedur
Gib die Definition des Verfahrens zurück
Die sys.procedures
Ansicht enthält keine Spalte für die Definition des Objekts. Wenn Sie wie bei der vorherigen Methode die Definition jeder gespeicherten Prozedur zurückgeben möchten, können Sie sie mit sys.sql_modules
verbinden Systemansicht.
Beispiel:
SELECT definition FROM sys.procedures p INNER JOIN sys.sql_modules m ON p.object_id = m.object_id;