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