Tento článek představuje dva způsoby, jak vrátit seznam uložených procedur v databázi SQL Server.
Možnost 1 – Zobrazení informačního schématu ROUTINES
Můžete použít ROUTINES
zobrazení informačního schématu pro získání seznamu všech uživatelsky definovaných uložených procedur v databázi.
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Výsledek:
+------------------+----------------------+ | ROUTINE_SCHEMA | ROUTINE_NAME | |------------------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +------------------+----------------------+
Vraťte definici procedury
INFORMATION_SCHEMA.ROUTINES
pohled má také ROUTINE_DEFINITION
sloupec, takže v případě potřeby můžete snadno vrátit definici každé uložené procedury.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Možnost 2 – Zobrazení systémového katalogu sys.objects
Dalším způsobem, jak vrátit seznam uložených procedur, je dotaz na sys.objects
zobrazení systémového katalogu.
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type = 'P';
Výsledek:
+----------+----------------------+ | Schema | name | |----------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +----------+----------------------+
Typ P
je pravděpodobně pro „Postup“.
Dalším způsobem, jak toho dosáhnout, je filtrovat podle type_desc
sloupec:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type_desc = 'SQL_STORED_PROCEDURE';
Vraťte definici procedury
Soubor sys.objects
zobrazení neobsahuje sloupec pro definici objektu. Pokud chcete vrátit definici každé uložené procedury, můžete ji připojit pomocí sys.sql_modules
systémový pohled.
Příklad:
SELECT definition FROM sys.objects o INNER JOIN sys.sql_modules m ON o.object_id = m.object_id WHERE type = 'P';
Možnost 3 – Zobrazení katalogu sys.procedures
sys.procedures
uložená procedura katalogu obsahuje řádek pro každý objekt, což je procedura nějakého druhu, s sys.objects.type =P, X, RF a PC.
Spuštění následujícího kódu vrátí všechny uložené procedury, které uživatel buď vlastní, nebo ke kterým má uživatel nějaké oprávnění.
SELECT SCHEMA_NAME(schema_id) AS [Schema], Name FROM sys.procedures;
Výsledek:
+----------+----------------------+ | Schema | Name | |----------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +----------+----------------------+
Toto zobrazení dědí type
sloupec z sys.objects
takže můžete filtrovat výsledky podle typu procedury, pokud chcete.
SELECT SCHEMA_NAME(schema_id), name FROM sys.procedures WHERE type = 'P';
V mém případě dostanu stejný výsledek, protože oba mé postupy jsou typu „P“.
Pokud vás to zajímá, zde je význam jednotlivých typů.
- P
- Uložená procedura SQL
- X
- Rozšířená uložená procedura
- RF
- Procedura-filtrování replikace
- PC
- Uložená procedura sestavení (CLR)
Vraťte definici procedury
sys.procedures
zobrazení neobsahuje sloupec pro definici objektu. Stejně jako u předchozí metody, pokud chcete vrátit definici každé uložené procedury, můžete ji připojit pomocí sys.sql_modules
systémový pohled.
Příklad:
SELECT definition FROM sys.procedures p INNER JOIN sys.sql_modules m ON p.object_id = m.object_id;