Создание и использование определяемой пользователем функции

Определяемая пользователем функция — это новый объект Microsoft SQL Server 2000, аналогичный представлению и хранимой процедуре. Отличие ее от упомянутых объектов состоит в том, что она всегда, как и любая другая функция, возвращает некоторое значение. Причем в зависимости от того, какое значение возвращает функция, она относится к одному из трех типов:

  • встроенная;
  • табличная;
  • скалярная.

Встроенная определяемая пользователем функция представляет собой инструкцию SELECT, которая возвращает обновляемый набор записей.
Табличная определяемая пользователем функция может содержать несколько инструкций SQL и возвращает необновляемый набор записей.
Скалярная определяемая пользователем функция возвращает скалярное значение одного из следующих типов данных: int, decimal, varchar, sql_variant или table.
Встроенные и табличные функции обычно употребляются в предложении FROM инструкции SQL, скалярная же функция может быть использована в любом месте запроса, где разрешено использование имени поля таблицы. Кроме этого, определенная пользователем функция может быть применена в качестве источника данных для формы, отчета и поля со списком в форме, однако она не может быть использована в качестве источника записей для страницы доступа к данным.
Правила создания определенной пользователем функции те же самые, что и для хранимой процедуры. То есть можно использовать для ее создания Конструктор запросов, если она состоит из одной инструкции SELECT, или редактор SQL, если тело функции содержит несколько инструкций SQL. В первом случае вы можете использовать ярлык Создание функции в режиме конструктора (Create function in designer) в списке запросов окна проекта. Во втором случае необходимо нажать кнопку Создать (New) и выбрать соответствующую строку в списке операций диалогового окна Новый запрос (New Query).
Подробнее об определенных пользователем функциях документацию по Microsoft SQL Server.
 
Использование индексированных представлений
Представления SQL Server могут быть проиндексированы, т. е. существует возможность сохранить результаты представления и создать для них индекс. Правда это можно сделать, только если проект Access подключен к Microsoft SQL Server 2000 Enterprise Edition или SQL Server 2000 Developer Edition. Если вы используете Microsoft SQL Server 2000 Desktop Edition, то это сделать нельзя.
Представления индексируются в том случае, если требуется ускорить доступ к данным, возвращаемым этим представлением. Чтобы создать индекс для представления, необходимо:

  1. Открыть представление в режиме Конструктора.
  2. Щелкнуть правой кнопкой мыши по свободному полю в области таблиц и выбрать из контекстного меню команду Управление индексами (Manage Indexes). Появится диалоговое окно Индексы (Indexes) .
  1. Нажать кнопку Создать (New) и заполнить поля для описания индекса. Это делается так же, как при создании индекса для таблицы, т. е. необходимо ввести имя индекса, указать столбцы запроса, по которым должен быть построен индекс, порядок сортировки и т. д.
  2. Нажать кнопку ОК.

Замечание
Индекс можно добавить к представлению только в том случае, если вы являетесь владельцем всех его базовых таблиц.
Если теперь открыть окно свойств представления, то вы увидите, что установлен флажок Привязать к схеме (Bind to Schema). Это означает, что индексированное представление автоматически получает так называемую схемную привязку. После того как такое представление сохранено, SQL Server будет контролировать, чтобы базовые таблицы не были изменены таким образом, что индексированное представление станет некорректным, например, изменено наименование базовой таблицы или наименование столбца базовой таблицы, который включен в результат запроса.
В случае подтверждения схемная привязка и индексы в соответствующих представлениях будут удалены.
Замечание
Выполнить схемную привязку можно для любого представления, установив флажок Привязать к схеме (Bind to Schema).