Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

3 maneiras de listar todos os procedimentos armazenados em um banco de dados SQL Server


Este artigo apresenta duas maneiras de retornar uma lista de procedimentos armazenados em um banco de dados SQL Server.


Opção 1 – A Visualização do Esquema de Informações das ROTINAS


Você pode usar as ROUTINES visualização do esquema de informações para obter uma lista de todos os procedimentos armazenados definidos pelo usuário em um banco de dados.
USE Music;
SELECT 
  ROUTINE_SCHEMA,
  ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE';

Resultado:
+------------------+----------------------+
| ROUTINE_SCHEMA   | ROUTINE_NAME         |
|------------------+----------------------|
| dbo              | spAlbumsFromArtist   |
| dbo              | uspGetAlbumsByArtist |
+------------------+----------------------+

Devolver a definição do procedimento


As INFORMATION_SCHEMA.ROUTINES view também tem um ROUTINE_DEFINITION coluna, para que você possa retornar facilmente a definição de cada procedimento armazenado, se necessário.
SELECT ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE';

Opção 2 – A Exibição do Catálogo do Sistema sys.objects


Outra maneira de retornar uma lista de procedimentos armazenados é consultar o sys.objects visualização do catálogo do sistema.
SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  name
FROM sys.objects
WHERE type = 'P';

Resultado:
+----------+----------------------+
| Schema   | name                 |
|----------+----------------------|
| dbo      | spAlbumsFromArtist   |
| dbo      | uspGetAlbumsByArtist |
+----------+----------------------+

O tipo P é presumível para “Procedimento”.

Outra maneira de fazer isso é filtrar pelo type_desc coluna:
SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  name
FROM sys.objects
WHERE type_desc = 'SQL_STORED_PROCEDURE';

Devolver a definição do procedimento


Os sys.objects view não inclui uma coluna para a definição do objeto. Se você deseja retornar a definição de cada procedimento armazenado, pode juntá-lo com o sys.sql_modules visão do sistema.

Exemplo:
SELECT definition
FROM sys.objects o
INNER JOIN sys.sql_modules m 
ON o.object_id = m.object_id
WHERE type = 'P';

Opção 3 – A Exibição do Catálogo sys.procedures


Os sys.procedures procedimento armazenado de catálogo contém uma linha para cada objeto que é um procedimento de algum tipo, com sys.objects.type =P, X, RF e PC.

A execução do código a seguir retornará todos os procedimentos armazenados que o usuário possui ou nos quais o usuário recebeu alguma permissão.
SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  Name
FROM sys.procedures;

Resultado:
+----------+----------------------+
| Schema   | Name                 |
|----------+----------------------|
| dbo      | spAlbumsFromArtist   |
| dbo      | uspGetAlbumsByArtist |
+----------+----------------------+

Esta visão herda o type coluna de sys.objects para que você possa filtrar os resultados por tipo de procedimento, se desejar.
SELECT 
  SCHEMA_NAME(schema_id),
  name
FROM sys.procedures
WHERE type = 'P';

No meu caso, recebo o mesmo resultado porque meus dois procedimentos são do tipo “P”.

Caso você esteja se perguntando, aqui está o que cada tipo significa.
P
Procedimento armazenado SQL
X
Procedimento armazenado estendido
RF
Procedimento de filtro de replicação
PC
Procedimento armazenado de montagem (CLR)

Devolver a definição do procedimento


Os sys.procedures view não inclui uma coluna para a definição do objeto. Assim como no método anterior, se você quiser retornar a definição de cada procedimento armazenado, poderá juntá-lo com o sys.sql_modules visão do sistema.

Exemplo:
SELECT definition
FROM sys.procedures p
INNER JOIN sys.sql_modules m 
ON p.object_id = m.object_id;