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');