Тази статия представя два начина за връщане на списък с дефинирани от потребителя функции в база данни на SQL Server.
Опция 1 – Изгледът на информационната схема на ROUTINES
Можете да използвате ROUTINES
изглед на информационна схема, за да получите списък с всички дефинирани от потребителя функции в база данни.
Този изглед връща съхранени процедури, както и функции, така че ще трябва да добавите WHERE
клауза, за да я стесните само до функции.
USE Music; SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE, DATA_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Резултат:
+------------------+-------------------------+----------------+-------------+ | 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 | +------------------+-------------------------+----------------+-------------+
Върнете дефиницията на функцията
Този изглед също има ROUTINE_DEFINITION
колона, така че можете лесно да върнете дефиницията на всяка функция, ако е необходимо.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION';
Опция 2 – Изгледът на системния каталог sys.objects
Друг начин за връщане на списък с функции е да направите заявка за sys.objects
изглед на системния каталог.
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type IN ('AF','FN','FS','FT','IF','TF');>
Резултат:
+----------+-------------------------+----------------------------------+ | 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 | +----------+-------------------------+----------------------------------+
Тук изрично включих всички типове функции в WHERE
клауза.
Ако изпълнявате ad hoc заявка, но не можете да запомните всички типове, можете да направите нещо подобно:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE type_desc LIKE '%FUNCTION';
Или това:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name, type_desc FROM sys.objects WHERE RIGHT(type_desc, 8) = 'FUNCTION';
Върнете дефиницията на функцията
sys.objects
изгледът не включва колона за дефиницията на обекта. Ако искате да върнете дефиницията на всяка функция, можете да я присъедините с sys.sql_modules
системен изглед.
Пример:
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');