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

2 maneiras de retornar todas as funções definidas pelo usuário em um banco de dados SQL Server


Este artigo apresenta duas maneiras de retornar uma lista de funções definidas pelo usuário 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 todas as funções definidas pelo usuário em um banco de dados.

Essa visualização retorna procedimentos armazenados e funções, portanto, você precisará adicionar um WHERE cláusula para reduzi-lo a apenas funções.
USE Music;
SELECT 
  ROUTINE_SCHEMA,
  ROUTINE_NAME,
  ROUTINE_TYPE,
  DATA_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'FUNCTION';

Resultado:
+------------------+-------------------------+----------------+-------------+
| ROUTINE_SCHEMA   | ROUTINE_NAME            | ROUTINE_TYPE   | DATA_TYPE   |
|------------------+-------------------------+----------------+-------------|
| dbo              | ISOweek                 | FUNCTION       | int         |
| dbo              | ufn_AlbumsByGenre       | FUNCTION       | TABLE       |
| dbo              | ufn_AlbumsByArtist      | FUNCTION       | TABLE       |
| dbo              | ufn_AlbumsByGenre_MSTVF | FUNCTION       | TABLE       |
+------------------+-------------------------+----------------+-------------+

Retorne a definição da função


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

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


Outra maneira de retornar uma lista de funções é consultar o sys.objects visualização do catálogo do sistema.
SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  name,
  type_desc
FROM sys.objects
WHERE type IN ('AF','FN','FS','FT','IF','TF');

Resultado:
+----------+-------------------------+----------------------------------+
| Schema   | name                    | type_desc                        |
|----------+-------------------------+----------------------------------|
| dbo      | ISOweek                 | SQL_SCALAR_FUNCTION              |
| dbo      | ufn_AlbumsByGenre       | SQL_INLINE_TABLE_VALUED_FUNCTION |
| dbo      | ufn_AlbumsByArtist      | SQL_INLINE_TABLE_VALUED_FUNCTION |
| dbo      | ufn_AlbumsByGenre_MSTVF | SQL_TABLE_VALUED_FUNCTION        |
+----------+-------------------------+----------------------------------+

Aqui eu incluí explicitamente todos os tipos de função no WHERE cláusula.

Se você está executando uma consulta ad hoc, mas não consegue se lembrar de todos os tipos, pode fazer algo assim:
SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  name,
  type_desc
FROM sys.objects
WHERE type_desc LIKE '%FUNCTION';

Ou isto:
SELECT 
  SCHEMA_NAME(schema_id) AS [Schema],
  name,
  type_desc
FROM sys.objects
WHERE RIGHT(type_desc, 8) = 'FUNCTION';

Retorne a definição da função


Os sys.objects view não inclui uma coluna para a definição do objeto. Se você quiser retornar a definição de cada função, você pode juntá-la 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 IN ('AF','FN','FS','FT','IF','TF');