Este artículo presenta dos formas de devolver una lista de funciones definidas por el usuario en una base de datos de SQL Server.
Opción 1:la vista de esquema de información de RUTINAS
Puedes usar las ROUTINES
vista de esquema de información para obtener una lista de todas las funciones definidas por el usuario en una base de datos.
Esta vista devuelve procedimientos almacenados y funciones, por lo que deberá agregar un WHERE
cláusula para reducirla a solo funciones.
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 | +------------------+-------------------------+----------------+-------------+
Devolver la definición de la función
Esta vista también tiene una ROUTINE_DEFINITION
columna, por lo que puede devolver fácilmente la definición de cada función si es necesario.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Opción 2:la vista del catálogo del sistema sys.objects
Otra forma de devolver una lista de funciones es consultar el sys.objects
vista del catálogo del 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 | +----------+-------------------------+----------------------------------+
Aquí he incluido explícitamente todos los tipos de funciones en WHERE
cláusula.
Si está ejecutando una consulta ad hoc pero no puede recordar todos los tipos, podría hacer algo como esto:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type_desc LIKE '%FUNCTION';
O esto:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE RIGHT(type_desc, 8) = 'FUNCTION';
Devolver la definición de la función
Los sys.objects
view no incluye una columna para la definición del objeto. Si desea devolver la definición de cada función, puede unirla con sys.sql_modules
vista del sistema.
Ejemplo:
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');