Den här artikeln presenterar två sätt att returnera en lista över användardefinierade funktioner i en SQL Server-databas.
Alternativ 1 – Informationsschemavyn för RUTINER
Du kan använda ROUTINES informationsschemavy för att få en lista över alla användardefinierade funktioner i en databas.
Den här vyn returnerar lagrade procedurer såväl som funktioner, så du måste lägga till en WHERE klausul för att begränsa det till bara funktioner.
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE, DATA_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Resultat:
+------------------+-------------------------+----------------+-------------+ | 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 | +------------------+-------------------------+----------------+-------------+
Återställ funktionens definition
Den här vyn har också en ROUTINE_DEFINITION kolumn, så att du enkelt kan returnera varje funktions definition om det behövs.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Alternativ 2 – Sys.objects systemkatalogvy
Ett annat sätt att returnera en lista med funktioner är att fråga sys.objects systemkatalogvy.
SELECT
SCHEMA_NAME(schema_id) AS [Schema],
name,
type_desc
FROM sys.objects
WHERE type IN ('AF','FN','FS','FT','IF','TF');
> Resultat:
+----------+-------------------------+----------------------------------+ | 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 | +----------+-------------------------+----------------------------------+
Här har jag uttryckligen inkluderat alla funktionstyper i WHERE klausul.
Om du kör en ad hoc-fråga men du inte kommer ihåg alla typerna kan du göra något så här:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type_desc LIKE '%FUNCTION';
Eller det här:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE RIGHT(type_desc, 8) = 'FUNCTION';
Återställ funktionens definition
sys.objects vyn innehåller inte en kolumn för objektets definition. Om du vill returnera varje funktions definition kan du ansluta den med sys.sql_modules systemvy.
Exempel:
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');