Denne artikel præsenterer to måder at returnere en liste over brugerdefinerede funktioner i en SQL Server-database.
Mulighed 1 – RUTINER-informationsskemavisningen
Du kan bruge ROUTINES
informationsskemavisning for at få en liste over alle brugerdefinerede funktioner i en database.
Denne visning returnerer lagrede procedurer såvel som funktioner, så du skal tilføje en WHERE
klausul for at indsnævre det til kun 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 | +------------------+-------------------------+----------------+-------------+
Returnér funktionens definition
Denne visning har også en ROUTINE_DEFINITION
kolonne, så du nemt kan returnere hver funktions definition, hvis det kræves.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Mulighed 2 – Sys.objects systemkatalogvisning
En anden måde at returnere en liste over funktioner på er at forespørge sys.objects
systemkatalogvisning.
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 | +----------+-------------------------+----------------------------------+
Her har jeg eksplicit inkluderet alle funktionstyper i WHERE
klausul.
Hvis du kører en ad hoc-forespørgsel, men du ikke kan huske alle typerne, kan du gøre noget som dette:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type_desc LIKE '%FUNCTION';
Eller denne:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE RIGHT(type_desc, 8) = 'FUNCTION';
Returnér funktionens definition
sys.objects
visningen inkluderer ikke en kolonne til objektets definition. Hvis du vil returnere hver funktions definition, kan du tilslutte den med sys.sql_modules
systemvisning.
Eksempel:
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');