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

3 Möglichkeiten zum Auflisten aller gespeicherten Prozeduren in einer SQL Server-Datenbank

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;