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

Retornar procedimentos armazenados e funções em um banco de dados SQL Server:ROUTINES (Exemplos T-SQL)


No SQL Server, você pode usar o Transact-SQL ROUTINES visualização do esquema de informações do sistema para retornar uma lista de procedimentos e funções armazenados no banco de dados atual.

Mais especificamente, ele retorna uma lista de todos os procedimentos e funções armazenados que podem ser acessados ​​pelo usuário atual no banco de dados atual.

Você também pode usar ROUTINES simplesmente para retornar informações sobre um procedimento ou função específica, se necessário.

Para usar essa visualização, use o nome totalmente qualificado de INFORMATION_SCHEMA.ROUTINES .


Exemplo 1 – Retornar todas as rotinas


Aqui está um exemplo rápido que retorna todos os procedimentos e funções armazenados no banco de dados atual (aos quais o usuário atual tem acesso).
USE Music;
SELECT 
  ROUTINE_CATALOG,
  ROUTINE_SCHEMA,
  ROUTINE_NAME,
  ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES;

Resultado:
Changed database context to 'Music'.
+-------------------+------------------+----------------------+----------------+
| ROUTINE_CATALOG   | ROUTINE_SCHEMA   | ROUTINE_NAME         | ROUTINE_TYPE   |
|-------------------+------------------+----------------------+----------------|
| Music             | dbo              | ISOweek              | FUNCTION       |
| Music             | dbo              | ufn_AlbumsByGenre    | FUNCTION       |
| Music             | dbo              | spAlbumsFromArtist   | PROCEDURE      |
| Music             | dbo              | uspGetAlbumsByArtist | PROCEDURE      |
+-------------------+------------------+----------------------+----------------+
(4 rows affected)

Esses resultados me mostram que existem duas funções e dois procedimentos aos quais tenho acesso no banco de dados “Música”.

A exibição retorna um número bastante grande de colunas, portanto, neste exemplo, reduzi as colunas para apenas quatro.

Exemplo 2 – Encontrar uma rotina específica


Você também pode restringir os resultados a um determinado procedimento ou função, se preferir.

Neste exemplo eu incluo todas as colunas. Eu uso saída vertical para que você não seja forçado a rolar horizontalmente.
SELECT * 
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME = 'uspGetAlbumsByArtist';

Resultado (usando saída vertical):
-[ RECORD 1 ]-------------------------
SPECIFIC_CATALOG         | Music
SPECIFIC_SCHEMA          | dbo
SPECIFIC_NAME            | uspGetAlbumsByArtist
ROUTINE_CATALOG          | Music
ROUTINE_SCHEMA           | dbo
ROUTINE_NAME             | uspGetAlbumsByArtist
ROUTINE_TYPE             | PROCEDURE
MODULE_CATALOG           | NULL
MODULE_SCHEMA            | NULL
MODULE_NAME              | NULL
UDT_CATALOG              | NULL
UDT_SCHEMA               | NULL
UDT_NAME                 | NULL
DATA_TYPE                | NULL
CHARACTER_MAXIMUM_LENGTH | NULL
CHARACTER_OCTET_LENGTH   | NULL
COLLATION_CATALOG        | NULL
COLLATION_SCHEMA         | NULL
COLLATION_NAME           | NULL
CHARACTER_SET_CATALOG    | NULL
CHARACTER_SET_SCHEMA     | NULL
CHARACTER_SET_NAME       | NULL
NUMERIC_PRECISION        | NULL
NUMERIC_PRECISION_RADIX  | NULL
NUMERIC_SCALE            | NULL
DATETIME_PRECISION       | NULL
INTERVAL_TYPE            | NULL
INTERVAL_PRECISION       | NULL
TYPE_UDT_CATALOG         | NULL
TYPE_UDT_SCHEMA          | NULL
TYPE_UDT_NAME            | NULL
SCOPE_CATALOG            | NULL
SCOPE_SCHEMA             | NULL
SCOPE_NAME               | NULL
MAXIMUM_CARDINALITY      | NULL
DTD_IDENTIFIER           | NULL
ROUTINE_BODY             | SQL
ROUTINE_DEFINITION       | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS
SELECT AlbumName
FROM [fdec67e6a28d].[Music].[dbo].[Albums]
WHERE ArtistId = @ArtistId
EXTERNAL_NAME            | NULL
EXTERNAL_LANGUAGE        | NULL
PARAMETER_STYLE          | NULL
IS_DETERMINISTIC         | NO
SQL_DATA_ACCESS          | MODIFIES
IS_NULL_CALL             | NULL
SQL_PATH                 | NULL
SCHEMA_LEVEL_ROUTINE     | YES
MAX_DYNAMIC_RESULT_SETS  | -1
IS_USER_DEFINED_CAST     | NO
IS_IMPLICITLY_INVOCABLE  | NO
CREATED                  | 2019-10-26 01:11:30.677
LAST_ALTERED             | 2019-10-26 03:50:42.527
(1 row affected)

Você notará que muitas das colunas têm valores nulos. A documentação da Microsoft para esta exibição afirma que muitas dessas colunas sempre retornam NULL . Também afirma que alguns deles estão reservados para uso futuro.

Exemplo 3 - Procedimentos de devolução apenas


Você pode usar um WHERE cláusula para filtrar os resultados apenas para procedimentos armazenados ou apenas funções.

Este exemplo retorna apenas procedimentos armazenados.
SELECT 
  ROUTINE_CATALOG,
  ROUTINE_SCHEMA,
  ROUTINE_NAME,
  ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE';

Resultado:
+-------------------+------------------+----------------------+----------------+
| ROUTINE_CATALOG   | ROUTINE_SCHEMA   | ROUTINE_NAME         | ROUTINE_TYPE   |
|-------------------+------------------+----------------------+----------------|
| Music             | dbo              | spAlbumsFromArtist   | PROCEDURE      |
| Music             | dbo              | uspGetAlbumsByArtist | PROCEDURE      |
+-------------------+------------------+----------------------+----------------+
(2 rows affected)

Exemplo 4 – Apenas funções de retorno


Este exemplo retorna apenas funções.
SELECT 
  ROUTINE_CATALOG,
  ROUTINE_SCHEMA,
  ROUTINE_NAME,
  ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'FUNCTION';

Resultado:
+-------------------+------------------+-------------------+----------------+
| ROUTINE_CATALOG   | ROUTINE_SCHEMA   | ROUTINE_NAME      | ROUTINE_TYPE   |
|-------------------+------------------+-------------------+----------------|
| Music             | dbo              | ISOweek           | FUNCTION       |
| Music             | dbo              | ufn_AlbumsByGenre | FUNCTION       |
+-------------------+------------------+-------------------+----------------+
(2 rows affected)