W tym artykule przedstawiono dwa sposoby na zwrócenie listy procedur składowanych w bazie danych SQL Server.
Opcja 1 – Widok schematu informacyjnego ROUTINES
Możesz użyć ROUTINES
widok schematu informacji, aby uzyskać listę wszystkich zdefiniowanych przez użytkownika procedur składowanych w bazie danych.
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Wynik:
+------------------+----------------------+ | ROUTINE_SCHEMA | ROUTINE_NAME | |------------------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +------------------+----------------------+
Zwróć definicję procedury
INFORMATION_SCHEMA.ROUTINES
widok ma również ROUTINE_DEFINITION
kolumny, dzięki czemu w razie potrzeby można łatwo zwrócić definicję każdej procedury składowanej.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Opcja 2 – Widok katalogu systemu sys.objects
Innym sposobem na zwrócenie listy procedur składowanych jest zapytanie o sys.objects
widok katalogu systemowego.
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type = 'P';
Wynik:
+----------+----------------------+ | Schema | name | |----------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +----------+----------------------+
Typ P
jest przypuszczalnie dla „Procedury”.
Innym sposobem na to jest filtrowanie według type_desc
kolumna:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type_desc = 'SQL_STORED_PROCEDURE';
Zwróć definicję procedury
sys.objects
widok nie zawiera kolumny dla definicji obiektu. Jeśli chcesz zwrócić definicję każdej procedury składowanej, możesz dołączyć do niej za pomocą sys.sql_modules
widok systemu.
Przykład:
SELECT definition FROM sys.objects o INNER JOIN sys.sql_modules m ON o.object_id = m.object_id WHERE type = 'P';
Opcja 3 – Widok katalogu sys.procedures
sys.procedures
procedura składowana katalogu zawiera wiersz dla każdego obiektu, który jest pewnego rodzaju procedurą z sys.objects.type =P, X, RF i PC.
Wykonanie poniższego kodu zwróci wszystkie procedury składowane, których użytkownik jest właścicielem lub do których użytkownik otrzymał pewne uprawnienia.
SELECT SCHEMA_NAME(schema_id) AS [Schema], Name FROM sys.procedures;
Wynik:
+----------+----------------------+ | Schema | Name | |----------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +----------+----------------------+
Ten widok dziedziczy type
kolumna z sys.objects
więc możesz filtrować wyniki według typu procedury, jeśli chcesz.
SELECT SCHEMA_NAME(schema_id), name FROM sys.procedures WHERE type = 'P';
W moim przypadku otrzymuję ten sam wynik, ponieważ obie moje procedury są typu „P”.
Jeśli się zastanawiasz, oto, co oznacza każdy typ.
- P
- Procedura składowana SQL
- X
- Rozszerzona procedura składowana
- RF
- Procedura filtrowania replikacji
- komputer
- Procedura składowana zespołu (CLR)
Zwróć definicję procedury
sys.procedures
widok nie zawiera kolumny dla definicji obiektu. Podobnie jak w przypadku poprzedniej metody, jeśli chcesz zwrócić definicję każdej procedury składowanej, możesz połączyć ją za pomocą sys.sql_modules
widok systemu.
Przykład:
SELECT definition FROM sys.procedures p INNER JOIN sys.sql_modules m ON p.object_id = m.object_id;