Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

2 Möglichkeiten, alle benutzerdefinierten Funktionen in einer SQL Server-Datenbank zurückzugeben

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