Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Gespeicherte Prozeduren und Funktionen in einer SQL Server-Datenbank zurückgeben:ROUTINEN (T-SQL-Beispiele)

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)