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;