ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Отсутствие sys.functions в SQL Server 2005: причины и аналоги

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вы в поисках sys.functionsн не обнаруживаете его, то вашей жизненной буи будет использование sys.objects в SQL Server. Для вызова скалярных и табличных функций сделайте запрос:

SQL
Скопировать код
-- "Прощай, излишняя информация"
SELECT name, type_desc FROM sys.objects WHERE type IN ('FN', 'IF', 'TF', 'FS', 'FT');

В результате исполнения этого запроса, вы отфильтруете названия функций и их типы, исключив из результатов всё несущественное.

[AsideBanner]

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Создание собственного sql.functions

Несмотря на то, что SQL Server не предусматривает напрямую sys.functions, вы в состоянии создать его аналог самостоятельно. Воспользуйтесь нижеприведённым скриптом:

SQL
Скопировать код
-- "Если не обнаружено 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:

SQL
Скопировать код
-- "Как Питер Паркер, так и INFORMATION_SCHEMA на помощь городу"
SELECT ROUTINE_NAME, ROUTINE_TYPE 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_TYPE = 'FUNCTION';

Этот проверенный замысел не подвержен изменениям в системных таблицах.

Применение sys.objects для детализации информации

Хотите получить подробную информацию о функциях, связанных с вычисляемыми столбцами или задачами, привязанными к индексам? Обратитесь к sys.objects, которая содержит ценные данные:

SQL
Скопировать код
-- "Поиск функций начинается здесь"
SELECT *
FROM sys.objects
WHERE type IN ('TF', 'FN');

Для упрощения использования возможно применять type_desc как фильтр:

SQL
Скопировать код
-- "Простота превосходит сложность"
SELECT *
FROM sys.objects
WHERE type_desc LIKE '%FUNCTION%';

Эти запросы помогут ярко продемонстрировать универсальность sys.objects для различного рода запросов.

Визуализация

В процессе поиска конкретного объекта среди хаоса SQL Server:

Markdown
Скопировать код
🧰 sys.tables -> 🔨 Молотки (🔨, 🔨, 🔨)
🧰 sys.views -> 🔍 Лупы (🔍, 🔍)
🧰 sys.procedures -> ⚙️ Шестерёнки (⚙️, ⚙️, ⚙️, ⚙️)
🧰 sys.functions -> ❓ Не найдено... (🕵️‍♂️ Где же ключи?)

Перед вами пример необъятного инструментального ящика, где каждый отсек соответствует системному представлению каталога, но функции куда-то пропали.

Markdown
Скопировать код
На самом деле 💡 полезно воспользоваться инструментальным ящиком Пандоры "sys.objects":
🧰 sys.objects -> 🛠️ Ассортимент инструментов (🔨, 🔍, ⚙️, 🔧, ...)

Гаечные ключи (🔧), или sys.functions, перемешаны с прочими инструментами внутри sys.objects.

Почему sys.functions так неуловим?

Отсутствие sys.functions напоминает детектив без завершающих глав. Несмотря на всё, sys.objects раскрывает богатые возможности для работы с функциями.

Зачем стоит создавать собственное представление?

Создание пользовательского представления подобно пошиву одежды на заказ: вы не обеспечиваете копирование sys.functions, а совершенствуете свой опыт работы с запросами благодаря удобному и знакомому API.

Скалярные и табличные функции

В SQL Server функции классифицируются на скалярные, возвращающие единичное значение, и табличные, выдающие целую таблицу. Немаловажно осознавать эту разницу, так как производительность и метод использования обоих типов функций существенно различается.

Полезные материалы

  1. Применение DBCC PAGE для исследования структуры таблиц и индексов SQL Server — детальное руководство по использованию DBCC PAGE.
  2. Сопоставление и анализ представлений схем информации в SQL Server — объяснение сути представлений схем информации SQL Server.
  3. Хранимые процедуры и функции в SQL Server — статья об использовании и значимости хранимых процедур и функций.
  4. Разбивка представлений схем информации – SQLTeam — изучение представлений схем информации и их назначения.