Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
!!! Конспект ББД 2.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
86.83 Кб
Скачать

Работа с триггерами

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

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

  1. Триггеры на вставку, которые запускаются при попытке вставки данных в таблицу.

  2. Триггеры на обновление, которые запускаются при попытке изменения данных.

  3. Триггеры на удаление, которые запускаются при попытке удаления данных.

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

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

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

Для создания триггера используется команда CREATE TRIGGER

Первый вариант синтаксиса.

CREATE TRIGGER trigger_name

ON table_name

[WITH ENCRYPTION]

{FOR {[DELETE][,][INSERT][,][UPDATE]}

[WITH APPEND]

[NOT FOR REPLICATION]

AS

sql_statement[…n]

}

trigger_name – имя триггера, с помощью которого будет распознаваться хранимыми процедурами и командами T-SQL. Имя триггера должно быть уникально в пределах базы данных.

table_name – Имя таблицы базы данных, для которой будет создан триггер.

WITH ENCRYPTION – при указании этой опции сервер выполняет шифрование кода триггера.

{[DELETE][,][INSERT][,][UPDATE]} – Определяет, на какие команды будет реагировать триггер. При создании триггера должно быть указано хотя бы одно из этих ключевых слов. Допускается создание триггера, реагирующего на 2 или 3 команды.

Второй вариант синтаксиса.

CREATE TRIGGER trigger_name ON TABLE

[WITH ENCRYPION]

{FOR {[INSERT][,][UPDATE]}

[WITH APPEND]

[NOT FOR REPLICATION]

AS

{IF UPDATE (column)

[{AND/OR}

UPDATE(column)][…n]

}

sql_statement[…n]

}

Пример триггера

CREATE TRIGGER auth_upd_1 ON authsmall

FOR UPDATE AS SET NOCOUNT ON

PRINT ‘Попытка изменения данных в таблице authsmall’

IF (COLUMNS_UPDATED() & 1) != 0

PRINT(‘Изменение колонки au_id’)

IF (COLUMNS_UPDATED() & 2) != 0

PRINT(‘Изменение колонки au_frame’)

IF (COLUMNS_UPDATED() & 4) != 0

PRINT(‘Изменение колонки aujname’)

IF UPDATE(phone)

PRINT(‘Изменение колонки phone’)

IF ((CURRENT_USER = ‘dbo’) AND (COLUMNS_UPDATED() & 1) != 0 )

BEGIN

PRINT ‘Пользователь dbo не может изменять идентификационный номе равтора’

ROLLBACK TRANSACTION

END

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]