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