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

Хранимые процедуры можно создавать как последовательности операторов Transact-SQL с использованием оператора CREATE PROCEDURE и с помощью программы SQL Server Management Studio. Имя хранимой процедуры может иметь до 128 символов. В хранимой процедуре могут использоваться все операторы SQL, кроме операторов CREATE. По умолчанию разрешение на выполнение хранимой процедуры получает владелец БД, который может предоставлять эти права другим пользователям.

Оператор создания хранимой процедуры имеет следующий общий синтаксис:

CREATE {PROC | PROCEDURE} [имя_схемы.]имя_процедуры [;версия]

[ { @имя_параметра [имя_схемы.] тип_данных_параметра }

[ OUT | OUTPUT ]

          ] [ , …n ]

          [ WITH <procedure_option> [ , …n ] ]

          [FOR REPLICATION]

          AS { <инструкция_SQL> [;][ , …n ] | <method_specifier> }

[;]

Использование в имени процедуры составляющей [;версия] (задаваемой целыми числами) позволяет получить группу одноименных процедур с одинаковыми именами и разными версиями, например: ргос;1, ргос;2, ргос;3 и т. д. Это удобно тем, что всю такую группу процедур можно удалить одной командой:

DROPPROCEDUREproc

Пример. Создание и использование хранимой процедуры.

Создадим процедуру, возвращающую список студентов заданной группы.

CREATE PROCEDURE procSelectGr

@gr char(8)

AS

SELECT Фамилия, Имя, Отчество FROM Студенты

WHERE Группа=@gr

Для вызова процедуры есть 2 способа:

·  Указание только имени процедуры;

·  Использование команды EXECUTE.

В первом варианте вызов хранимой процедуры должен быть единственной командой передаваемого на исполнение пакета. Если это не так, то обязательно наличие команды EXECUTE.

Создание хранимой процедуры с помощью программы SQL Server Management Studio включает следующие действия.

1. Запуск этой программы из группы программ Microsoft SQL Server.

2. Выбор в открывшемся диалоговом окне программы сервера и БД.

3. Выбор элемента StoredProcedures (Хранимые процедуры) и выполнение команды его контекстного меню NewStoredProcedure (Создать хранимую процедуру).

4. В открывшемся окне вводятся операторы Transact-SQL создаваемой процедуры. При этом предлагается готовый шаблон с программным кодом процедуры.

5. Нажатие кнопки CheckSyntax (Синтаксический анализ) для проверки отсутствия синтаксических ошибок и при необходимости корректировка операторов для устранения ошибок.

6. Сохранение созданной хранимой процедуры.

В целом, создание хранимой процедуры предполагает решение следующих задач:

планирование прав доступа; при создании хранимой процедуры следует учитывать, что она будет иметь те же права доступа к объектам БД, что и создавший ее пользователь;

определение параметров хранимой процедуры; хранимые процедуры могут обладать входными и выходными параметрами;

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

Используя префиксы sp_, #, ##, создаваемую процедуру можно определить в качестве системной или временной. Как видно из синтаксиса команды, не допускается указывать имя владельца, которому будет принадлежать создаваемая процедура, а также имя БД, где она должна быть размещена. Таким образом, чтобы разместить создаваемую хранимую процедуру в конкретной БД, необходимо выполнить команду CREATE PROCEDURE в контексте этой БД. При обращении из тела хранимой процедуры к объектам той же БД можно использовать укороченные имена, т. е. без указания имени БД. Когда же требуется обратиться к объектам, расположенным в других БД, указание имени БД обязательно. Для передачи входных и выходных данных в создаваемой хранимой процедуре имена параметров должны начинаться с символа @. В одной хранимой процедуре можно задать множество параметров, разделенных запятыми. В теле процедуры не должны применяться локальные переменные, чьи имена совпадают с именами параметров этой процедуры.

1.5. Триггеры

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