Dieser Artikel stellt zwei Möglichkeiten zum Zurückgeben einer Liste benutzerdefinierter Funktionen in einer SQL Server-Datenbank vor.
Option 1 – Die ROUTINES-Informationsschemaansicht
Sie können die ROUTINES verwenden Informationsschemaansicht, um eine Liste aller benutzerdefinierten Funktionen in einer Datenbank zu erhalten.
Diese Ansicht gibt sowohl gespeicherte Prozeduren als auch Funktionen zurück, daher müssen Sie ein WHERE hinzufügen Klausel, um es auf nur Funktionen einzugrenzen.
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE, DATA_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Ergebnis:
+------------------+-------------------------+----------------+-------------+ | 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 | +------------------+-------------------------+----------------+-------------+
Gib die Definition der Funktion zurück
Diese Ansicht hat auch eine ROUTINE_DEFINITION Spalte, sodass Sie bei Bedarf problemlos die Definition jeder Funktion zurückgeben können.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Option 2 – Die sys.objects-Systemkatalogansicht
Eine andere Möglichkeit, eine Liste von Funktionen zurückzugeben, besteht darin, sys.objects abzufragen Systemkatalogansicht.
SELECT
SCHEMA_NAME(schema_id) AS [Schema],
name,
type_desc
FROM sys.objects
WHERE type IN ('AF','FN','FS','FT','IF','TF');
Ergebnis:
+----------+-------------------------+----------------------------------+ | 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 habe ich explizit alle Funktionstypen in WHERE eingebunden Klausel.
Wenn Sie eine Ad-hoc-Abfrage ausführen, sich aber nicht an alle Typen erinnern können, könnten Sie so etwas tun:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type_desc LIKE '%FUNCTION';
Oder dies:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE RIGHT(type_desc, 8) = 'FUNCTION';
Gib die Definition der Funktion zurück
Die sys.objects Die Ansicht enthält keine Spalte für die Definition des Objekts. Wenn Sie die Definition jeder Funktion zurückgeben möchten, können Sie sie mit sys.sql_modules verbinden Systemansicht.
Beispiel:
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');