W tym artykule przedstawiono dwa sposoby na zwrócenie listy funkcji zdefiniowanych przez użytkownika w bazie danych SQL Server.
Opcja 1 – Widok schematu informacyjnego ROUTINES
Możesz użyć ROUTINES
widok schematu informacji, aby uzyskać listę wszystkich funkcji zdefiniowanych przez użytkownika w bazie danych.
Ten widok zwraca procedury składowane oraz funkcje, więc musisz dodać WHERE
klauzulę, aby zawęzić ją do samych funkcji.
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE, DATA_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Wynik:
+------------------+-------------------------+----------------+-------------+ | 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 | +------------------+-------------------------+----------------+-------------+
Zwróć definicję funkcji
Ten widok ma również ROUTINE_DEFINITION
kolumny, dzięki czemu w razie potrzeby można łatwo zwrócić definicję każdej funkcji.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Opcja 2 – Widok katalogu systemu sys.objects
Innym sposobem na zwrócenie listy funkcji jest zapytanie o sys.objects
widok katalogu systemowego.
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type IN ('AF','FN','FS','FT','IF','TF');
Wynik:
+----------+-------------------------+----------------------------------+ | 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 | +----------+-------------------------+----------------------------------+
Tutaj wyraźnie umieściłem wszystkie typy funkcji w WHERE
klauzula.
Jeśli uruchamiasz zapytanie ad hoc, ale nie pamiętasz wszystkich typów, możesz zrobić coś takiego:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type_desc LIKE '%FUNCTION';
Albo to:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE RIGHT(type_desc, 8) = 'FUNCTION';
Zwróć definicję funkcji
sys.objects
widok nie zawiera kolumny dla definicji obiektu. Jeśli chcesz zwrócić definicję każdej funkcji, możesz dołączyć do niej za pomocą sys.sql_modules
widok systemu.
Przykład:
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');