In SQL Server können Sie die Transact-SQL ROUTINES
verwenden Systeminformationsschemaansicht, um eine Liste gespeicherter Prozeduren und Funktionen in der aktuellen Datenbank zurückzugeben.
Genauer gesagt gibt es eine Liste aller gespeicherten Prozeduren und Funktionen zurück, auf die der aktuelle Benutzer in der aktuellen Datenbank zugreifen kann.
Sie können auch ROUTINES
verwenden einfach, um bei Bedarf Informationen über eine bestimmte Prozedur oder Funktion zurückzugeben.
Um diese Ansicht zu verwenden, verwenden Sie den vollständig qualifizierten Namen INFORMATION_SCHEMA.ROUTINES
.
Beispiel 1 – Alle Routinen zurückgeben
Hier ist ein kurzes Beispiel, das alle gespeicherten Prozeduren und Funktionen in der aktuellen Datenbank zurückgibt (auf die der aktuelle Benutzer Zugriff hat).
USE Music; SELECT ROUTINE_CATALOG, ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE FROM INFORMATION_SCHEMA.ROUTINES;
Ergebnis:
Changed database context to 'Music'. +-------------------+------------------+----------------------+----------------+ | ROUTINE_CATALOG | ROUTINE_SCHEMA | ROUTINE_NAME | ROUTINE_TYPE | |-------------------+------------------+----------------------+----------------| | Music | dbo | ISOweek | FUNCTION | | Music | dbo | ufn_AlbumsByGenre | FUNCTION | | Music | dbo | spAlbumsFromArtist | PROCEDURE | | Music | dbo | uspGetAlbumsByArtist | PROCEDURE | +-------------------+------------------+----------------------+----------------+ (4 rows affected)
Diese Ergebnisse zeigen mir, dass es zwei Funktionen und zwei Prozeduren gibt, auf die ich in der „Musik“-Datenbank zugreifen kann.
Die Ansicht gibt eine ziemlich große Anzahl von Spalten zurück, daher habe ich die Spalten in diesem Beispiel auf nur vier eingegrenzt.
Beispiel 2 – Finden Sie eine bestimmte Routine
Sie können die Ergebnisse auch auf ein bestimmtes Verfahren oder eine bestimmte Funktion eingrenzen, wenn Sie dies bevorzugen.
In diesem Beispiel schließe ich alle Spalten ein. Ich verwende die vertikale Ausgabe, damit Sie nicht gezwungen sind, horizontal zu scrollen.
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'uspGetAlbumsByArtist';
Ergebnis (bei vertikaler Ausgabe):
-[ RECORD 1 ]------------------------- SPECIFIC_CATALOG | Music SPECIFIC_SCHEMA | dbo SPECIFIC_NAME | uspGetAlbumsByArtist ROUTINE_CATALOG | Music ROUTINE_SCHEMA | dbo ROUTINE_NAME | uspGetAlbumsByArtist ROUTINE_TYPE | PROCEDURE MODULE_CATALOG | NULL MODULE_SCHEMA | NULL MODULE_NAME | NULL UDT_CATALOG | NULL UDT_SCHEMA | NULL UDT_NAME | NULL DATA_TYPE | NULL CHARACTER_MAXIMUM_LENGTH | NULL CHARACTER_OCTET_LENGTH | NULL COLLATION_CATALOG | NULL COLLATION_SCHEMA | NULL COLLATION_NAME | NULL CHARACTER_SET_CATALOG | NULL CHARACTER_SET_SCHEMA | NULL CHARACTER_SET_NAME | NULL NUMERIC_PRECISION | NULL NUMERIC_PRECISION_RADIX | NULL NUMERIC_SCALE | NULL DATETIME_PRECISION | NULL INTERVAL_TYPE | NULL INTERVAL_PRECISION | NULL TYPE_UDT_CATALOG | NULL TYPE_UDT_SCHEMA | NULL TYPE_UDT_NAME | NULL SCOPE_CATALOG | NULL SCOPE_SCHEMA | NULL SCOPE_NAME | NULL MAXIMUM_CARDINALITY | NULL DTD_IDENTIFIER | NULL ROUTINE_BODY | SQL ROUTINE_DEFINITION | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS SELECT AlbumName FROM [fdec67e6a28d].[Music].[dbo].[Albums] WHERE ArtistId = @ArtistId EXTERNAL_NAME | NULL EXTERNAL_LANGUAGE | NULL PARAMETER_STYLE | NULL IS_DETERMINISTIC | NO SQL_DATA_ACCESS | MODIFIES IS_NULL_CALL | NULL SQL_PATH | NULL SCHEMA_LEVEL_ROUTINE | YES MAX_DYNAMIC_RESULT_SETS | -1 IS_USER_DEFINED_CAST | NO IS_IMPLICITLY_INVOCABLE | NO CREATED | 2019-10-26 01:11:30.677 LAST_ALTERED | 2019-10-26 03:50:42.527 (1 row affected)
Sie werden feststellen, dass viele der Spalten Nullwerte haben. Die Microsoft-Dokumentation für diese Ansicht gibt an, dass viele dieser Spalten immer NULL zurückgeben
. Es heißt auch, dass einige von ihnen für die zukünftige Verwendung reserviert sind.
Beispiel 3 – Nur Rückgabeverfahren
Sie können ein WHERE
verwenden -Klausel, um die Ergebnisse nur nach gespeicherten Prozeduren oder nur nach Funktionen zu filtern.
Dieses Beispiel gibt nur gespeicherte Prozeduren zurück.
SELECT ROUTINE_CATALOG, ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Ergebnis:
+-------------------+------------------+----------------------+----------------+ | ROUTINE_CATALOG | ROUTINE_SCHEMA | ROUTINE_NAME | ROUTINE_TYPE | |-------------------+------------------+----------------------+----------------| | Music | dbo | spAlbumsFromArtist | PROCEDURE | | Music | dbo | uspGetAlbumsByArtist | PROCEDURE | +-------------------+------------------+----------------------+----------------+ (2 rows affected)
Beispiel 4 – Nur Rückgabefunktionen
Dieses Beispiel gibt nur Funktionen zurück.
SELECT ROUTINE_CATALOG, ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Ergebnis:
+-------------------+------------------+-------------------+----------------+ | ROUTINE_CATALOG | ROUTINE_SCHEMA | ROUTINE_NAME | ROUTINE_TYPE | |-------------------+------------------+-------------------+----------------| | Music | dbo | ISOweek | FUNCTION | | Music | dbo | ufn_AlbumsByGenre | FUNCTION | +-------------------+------------------+-------------------+----------------+ (2 rows affected)