Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИПК_Занятия_ОПБД / Lectures_14-15.pptx
Скачиваний:
20
Добавлен:
15.04.2015
Размер:
3.86 Mб
Скачать

Функция COLUMNS_UPDATED()

возвращает двоичное число, каждый бит которого, начиная с младшего, соответствует одному столбцу таблицы (в порядке следования столбцов при создании таблицы). Если бит установлен в значение "1", то соответствующий столбец был изменен.

Кроме того, факт изменения столбца определяет и функция

UPDATE (имя_столбца)

81

Пример 1. Создание триггера типа AFTER, который запрещает обновлять

значение столбца Фамилия таблицы

Студенты. При этом в вызывающий

модуль возвращается сообщение о причине отказа.

Для этого используется встроенная функция RAISERROR, аргументами которой являются текст сообщения, уровень серьезности и статус ошибки.

82

Так как триггер расположен в одной

транзакции с командой, которая вызвала данный триггер, то команда ROLLBACK TRANSACTION возвращает состояние таблицы в исходное положение.

Пример 2. Создание триггера типа INSTEAD OF, срабатывающего на попытку удаления строк из таблицы Студенты. Триггер сначала удаляет строки из связанной таблицы Платежи (связь по полю КодСтудента), а затем уже из таблицы Студенты (т.е. реализует операцию каскадного удаления).

При этом в триггере обрабатываются и

возможные ошибки с откатом транзакции и возвращением в приложение сообщения об

ошибке.

84

 

10.2. DDL-триггеры

DDL-триггеры могут быть созданы

для «реакции» на DDL-операции, например, операции создания таблицы или новой БД. DDL-триггеры служат прежде всего для аудита и управления операциями, выполняемыми над всей

БД.

DDL-триггеры также позволяют ограничивать выполнение DDL-

операций, даже если у пользователя

87

есть разрешение на их исполнение.

Например, нужно запретить всем

пользователям, в том числе членам

фиксированной серверной роли sysadmin, изменять и удалять таблицы в рабочей среде.

Для этого можно создать DDL-триггер для событий ALTER / DROP TABLE, выполняющий откат этих операций и возвращающий сообщение о том, что у пользователей должно быть разрешение

для изменения и удаления таблицы.

88

Общий синтаксис для создания DDL-

Пример 1. DDL-триггер, запрещающий удаление или изменение таблицы и генерирующий соответствующее сообщение:

Соседние файлы в папке ИПК_Занятия_ОПБД