Отсутствие sys.functions в SQL Server 2005: причины и аналоги
Быстрый ответ
Если вы в поисках sys.functions
н не обнаруживаете его, то вашей жизненной буи будет использование sys.objects
в SQL Server. Для вызова скалярных и табличных функций сделайте запрос:
-- "Прощай, излишняя информация"
SELECT name, type_desc FROM sys.objects WHERE type IN ('FN', 'IF', 'TF', 'FS', 'FT');
В результате исполнения этого запроса, вы отфильтруете названия функций и их типы, исключив из результатов всё несущественное.
[AsideBanner]
Создание собственного sql.functions
Несмотря на то, что SQL Server не предусматривает напрямую sys.functions
, вы в состоянии создать его аналог самостоятельно. Воспользуйтесь нижеприведённым скриптом:
-- "Если не обнаружено sys.functions, то создадим его"
CREATE VIEW my_sys_functions AS
SELECT *
FROM sys.objects
WHERE type IN ('FN', 'IF', 'TF', 'FS', 'FT');
Таким образом, перед вами открывается всё удобство применения виртуального sys.functions
.
Доверяйте INFORMATION_SCHEMA
Если вы предпочитаете обеспеченность от версионности и стабильность, то опирайтесь на INFORMATION_SCHEMA.ROUTINES
:
-- "Как Питер Паркер, так и INFORMATION_SCHEMA на помощь городу"
SELECT ROUTINE_NAME, ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'FUNCTION';
Этот проверенный замысел не подвержен изменениям в системных таблицах.
Применение sys.objects для детализации информации
Хотите получить подробную информацию о функциях, связанных с вычисляемыми столбцами или задачами, привязанными к индексам? Обратитесь к sys.objects
, которая содержит ценные данные:
-- "Поиск функций начинается здесь"
SELECT *
FROM sys.objects
WHERE type IN ('TF', 'FN');
Для упрощения использования возможно применять type_desc
как фильтр:
-- "Простота превосходит сложность"
SELECT *
FROM sys.objects
WHERE type_desc LIKE '%FUNCTION%';
Эти запросы помогут ярко продемонстрировать универсальность sys.objects
для различного рода запросов.
Визуализация
В процессе поиска конкретного объекта среди хаоса SQL Server:
🧰 sys.tables -> 🔨 Молотки (🔨, 🔨, 🔨)
🧰 sys.views -> 🔍 Лупы (🔍, 🔍)
🧰 sys.procedures -> ⚙️ Шестерёнки (⚙️, ⚙️, ⚙️, ⚙️)
🧰 sys.functions -> ❓ Не найдено... (🕵️♂️ Где же ключи?)
Перед вами пример необъятного инструментального ящика, где каждый отсек соответствует системному представлению каталога, но функции куда-то пропали.
На самом деле 💡 полезно воспользоваться инструментальным ящиком Пандоры "sys.objects":
🧰 sys.objects -> 🛠️ Ассортимент инструментов (🔨, 🔍, ⚙️, 🔧, ...)
Гаечные ключи (🔧), или sys.functions
, перемешаны с прочими инструментами внутри sys.objects
.
Почему sys.functions так неуловим?
Отсутствие sys.functions
напоминает детектив без завершающих глав. Несмотря на всё, sys.objects
раскрывает богатые возможности для работы с функциями.
Зачем стоит создавать собственное представление?
Создание пользовательского представления подобно пошиву одежды на заказ: вы не обеспечиваете копирование sys.functions
, а совершенствуете свой опыт работы с запросами благодаря удобному и знакомому API.
Скалярные и табличные функции
В SQL Server функции классифицируются на скалярные, возвращающие единичное значение, и табличные, выдающие целую таблицу. Немаловажно осознавать эту разницу, так как производительность и метод использования обоих типов функций существенно различается.
Полезные материалы
- Применение DBCC PAGE для исследования структуры таблиц и индексов SQL Server — детальное руководство по использованию
DBCC PAGE
. - Сопоставление и анализ представлений схем информации в SQL Server — объяснение сути представлений схем информации SQL Server.
- Хранимые процедуры и функции в SQL Server — статья об использовании и значимости хранимых процедур и функций.
- Разбивка представлений схем информации – SQLTeam — изучение представлений схем информации и их назначения.