Tento článek představuje dva způsoby, jak vrátit seznam uživatelem definovaných funkcí v databázi SQL Server.
Možnost 1 – Zobrazení informačního schématu ROUTINES
Můžete použít ROUTINES
zobrazení informačního schématu pro získání seznamu všech uživatelsky definovaných funkcí v databázi.
Toto zobrazení vrací uložené procedury i funkce, takže budete muset přidat WHERE
klauzule k zúžení pouze na funkce.
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE, DATA_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Výsledek:
+------------------+-------------------------+----------------+-------------+ | 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 | +------------------+-------------------------+----------------+-------------+
Vrátí definici funkce
Toto zobrazení má také ROUTINE_DEFINITION
sloupec, takže v případě potřeby můžete snadno vrátit definici každé funkce.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Možnost 2 – Zobrazení systémového katalogu sys.objects
Dalším způsobem, jak vrátit seznam funkcí, je dotaz na sys.objects
zobrazení systémového katalogu.
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type IN ('AF','FN','FS','FT','IF','TF');
Výsledek:
+----------+-------------------------+----------------------------------+ | 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 | +----------+-------------------------+----------------------------------+
Zde jsem výslovně zahrnul všechny typy funkcí do WHERE
doložka.
Pokud spouštíte dotaz ad hoc, ale nepamatujete si všechny typy, můžete udělat něco takového:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type_desc LIKE '%FUNCTION';
Nebo toto:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE RIGHT(type_desc, 8) = 'FUNCTION';
Vrátí definici funkce
Soubor sys.objects
zobrazení neobsahuje sloupec pro definici objektu. Pokud chcete vrátit definici každé funkce, můžete ji připojit pomocí sys.sql_modules
systémový pohled.
Příklad:
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');