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