Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

3 начина за изброяване на всички съхранени процедури в база данни на SQL Server

Тази статия представя два начина за връщане на списък със съхранени процедури в база данни на 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;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Има ли Entity Framework 7 база данни – първи POCO генератор?

  2. SQL Server IF срещу IIF():Каква е разликата?

  3. Как да изчистя буфера PRINT в TSQL?

  4. Как да коригирате конфликт на съпоставяне в заявка на SQL Server?

  5. Има ли .NET еквивалент на newsequentialid() на SQL Server