In dit artikel worden twee manieren gepresenteerd om een lijst met door de gebruiker gedefinieerde functies in een SQL Server-database te retourneren.
Optie 1 – De ROUTINES-informatieschemaweergave
U kunt de ROUTINES
. gebruiken informatieschemaweergave om een lijst te krijgen van alle door de gebruiker gedefinieerde functies in een database.
Deze weergave retourneert zowel opgeslagen procedures als functies, dus u moet een WHERE
. toevoegen clausule om het te beperken tot alleen functies.
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE, DATA_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Resultaat:
+------------------+-------------------------+----------------+-------------+ | 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 | +------------------+-------------------------+----------------+-------------+
Retourneer de definitie van de functie
Deze weergave heeft ook een ROUTINE_DEFINITION
kolom, zodat u indien nodig gemakkelijk de definitie van elke functie kunt retourneren.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Optie 2 – De systeemcatalogusweergave sys.objects
Een andere manier om een lijst met functies te retourneren, is door de sys.objects
. op te vragen systeemcatalogusweergave.
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type IN ('AF','FN','FS','FT','IF','TF');
Resultaat:
+----------+-------------------------+----------------------------------+ | 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 | +----------+-------------------------+----------------------------------+
Hier heb ik expliciet alle functietypes opgenomen in de WHERE
clausule.
Als u een ad-hocquery uitvoert, maar u kunt niet alle typen onthouden, kunt u zoiets als dit doen:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type_desc LIKE '%FUNCTION';
Of dit:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE RIGHT(type_desc, 8) = 'FUNCTION';
Retourneer de definitie van de functie
De sys.objects
weergave bevat geen kolom voor de definitie van het object. Als u de definitie van elke functie wilt retourneren, kunt u deze samenvoegen met de sys.sql_modules
systeemweergave.
Voorbeeld:
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');