Тази статия представя два начина за връщане на списък със съхранени процедури в база данни на SQL Server.
Опция 1 – Изгледът на информационната схема на ROUTINES
Можете да използвате ROUTINES
изглед на информационна схема, за да получите списък с всички дефинирани от потребителя съхранени процедури в база данни.
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Резултат:
+------------------+----------------------+ | ROUTINE_SCHEMA | ROUTINE_NAME | |------------------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +------------------+----------------------+
Върнете дефиницията на процедурата
INFORMATION_SCHEMA.ROUTINES
изгледът също има ROUTINE_DEFINITION
колона, така че можете лесно да върнете дефиницията на всяка съхранена процедура, ако е необходимо.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE';
Опция 2 – Изгледът на системния каталог sys.objects
Друг начин за връщане на списък със съхранени процедури е да запитате sys.objects
изглед на системен каталог.
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type = 'P';
Резултат:
+----------+----------------------+ | Schema | name | |----------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +----------+----------------------+
Типът P
е предполагаемо за „Процедура“.
Друг начин да направите това е филтриране по type_desc
колона:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name FROM sys.objects WHERE type_desc = 'SQL_STORED_PROCEDURE';
Върнете дефиницията на процедурата
sys.objects
изгледът не включва колона за дефиницията на обекта. Ако искате да върнете дефиницията на всяка съхранена процедура, можете да я присъедините с sys.sql_modules
системен изглед.
Пример:
SELECT definition FROM sys.objects o INNER JOIN sys.sql_modules m ON o.object_id = m.object_id WHERE type = 'P';
Опция 3 – Изгледът на каталога sys.procedures
sys.procedures
Съхранената процедура в каталог съдържа ред за всеки обект, който е процедура от някакъв вид, с sys.objects.type =P, X, RF и PC.
Изпълнението на следния код ще върне всички съхранени процедури, които потребителят притежава или за които потребителят е получил някакво разрешение.
SELECT SCHEMA_NAME(schema_id) AS [Schema], Name FROM sys.procedures;
Резултат:
+----------+----------------------+ | Schema | Name | |----------+----------------------| | dbo | spAlbumsFromArtist | | dbo | uspGetAlbumsByArtist | +----------+----------------------+
Този изглед наследява type
колона от sys.objects
така че можете да филтрирате резултатите по тип процедура, ако желаете.
SELECT SCHEMA_NAME(schema_id), name FROM sys.procedures WHERE type = 'P';
В моя случай получавам същия резултат, защото и двете ми процедури са от тип „P“.
В случай, че се чудите, ето какво означава всеки тип.
- P
- SQL съхранена процедура
- X
- Разширена съхранена процедура
- RF
- Процедура за филтриране на репликация
- PC
- Съхранена процедура (CLR)
Върнете дефиницията на процедурата
sys.procedures
изгледът не включва колона за дефиницията на обекта. Както при предишния метод, ако искате да върнете дефиницията на всяка съхранена процедура, можете да я присъедините с sys.sql_modules
системен изглед.
Пример:
SELECT definition FROM sys.procedures p INNER JOIN sys.sql_modules m ON p.object_id = m.object_id;