Разработка серверной части ИС в СУБД MS SQL Server. Особенности настройки свойств таблиц. Общие рекомендации по выбору типа данных, страница 6

Функции Multi-statement комбинируют способность скалярных функций содержать сложный программный код со способностью внедренных табличных функций возвращать результирующий набор данных в виде таблицы. Этот тип функций создает табличную переменную, а затем заполняет ее в теле функции. Сформированная таблица возвращается функцией и может использоваться в инструкциях SELECT. Преимущество функций Multi-statement - возможность формировать результат с помощью пакета инструкций, а затем напрямую использовать этот набор данных в инструкциях SELECT.

В общем виде синтаксис табличной функции с множеством инструкций можно представить в виде:

Пример.

1.4. Хранимые процедуры

При создании приложения, интегрированного с SQL Server, возникает проблема организации программного взаимодействия с БД. Для решения этой задачи имеются две основные возможности:

·  формировать команды SQL на стороне клиента, а затем посылать эти команды на сервер для выполнения;

·  перенести часть программного кода на сторону сервера.

Последний подход лучше, т.к. позволяет отделить интерфейс пользователя от интерфейса данных и в результате уменьшить вероятность ошибок и повысить защиту данных. При этом также уменьшается передача данных по сети. Одно из средств реализации такого подхода – хранимые процедуры, которые чаще всего используются в качестве программных модулей на стороне сервера.

Хранимые процедуры представляют собой фрагменты программного кода на Transact-SQL, которые выполняются на сервере. Они могут запускаться вызывающим их приложением, правилами проверки целостности данных или триггерами. Хранимая процедура может иметь параметры, позволяющие передавать в нее и получать обратно значения, выбираемые из таблиц или вычисляемые при выполнении процедуры.

Основное преимущество хранимых процедур - высокая оперативность обработки информации, обусловленная использованием, как правило, мощного компьютера-сервера и тем, что для доступа к данным не тратится лишнее время, поскольку БД размещается на сервере.

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

По области видимости различают хранимые процедуры следующих четырех типов: системные (System), локальные (Local), временные (Temporary) и удаленные (Remote).

Системные хранимые процедуры размещаются в системной БД Master, используются сервером и администратором. Имена системных процедур начинаются с символов sp_. Для создания собственной системной хранимой процедуры нужно присвоить ей имя, начинающееся с sp_, и поместить ее в системную БД Master. Системные хранимые процедуры предназначены для выполнения различных административных действий. Практически все действия по администрированию сервера выполняются с их помощью. Можно сказать, что системные хранимые процедуры являются интерфейсом, обеспечивающим работу с системными таблицами. Системные хранимые процедуры могут быть вызваны в контексте любой другой БД.

Локальные хранимые процедуры размещаются в пользовательских БД.

Временные хранимые процедуры имеют имена, начинающиеся с символов # или ##. Процедуры с одним символом # в начале имени являются временными локальными процедурами и доступны из соединения (сессии), в котором они были созданы. При закрытии этого соединения процедура автоматически уничтожается. Процедуры с двумя символами ## в начале имени являются временными глобальными процедурами и доступны в любой сессии работы с данным сервером.

Удаленные хранимые процедуры можно вызывать с сервера, отличного от текущего сервера. При этом текущий сервер играет роль промежуточного звена. Кроме того, удаленную хранимую процедуру можно вызвать непосредственно с сервера, на котором она находится.

Еще одним типом хранимых процедур являются расширенные хранимые процедуры (extended stored procedures). Они пишутся на языке программирования (например, С). Расширенные хранимые процедуры оформляются как функции в составе библиотек динамических связей - DLL (Dynamic Link Library), что повышает скорость их выполнения. Имена расширенных хранимых процедур начинаются с символов хр_.