Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Янин В.Л. "Новгородские акты XII-XV Хронологический комментарий" (История)

Майринк Г. "Белый доминиканец " (Художественная литература)

Хусаинов А. "Голоса вещей. Альманах том 2" (Художественная литература)

Петров Г.И. "Отлучение Льва Толстого " (Художественная литература)

Хусаинов А. "Голоса вещей. Альманах том 1 " (Художественная литература)
Реклама

Microsoft SQL server. Реализация и обслуживание Учебный курс - Microsoft press

Microsoft press Microsoft SQL server. Реализация и обслуживание Учебный курс — Microsoft Press, 2007. — 766 c.
Предыдущая << 1 .. 136 137 138 139 140 141 < 142 > 143 144 145 146 147 148 .. 343 >> Следующая

Общий синтаксис Transact-SQL для создания DML-триггера имеет следующий вид:
CREATE TRIGGER [ имя_схемы . ]имя_триггера ON { таблица \ представление }
[ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS { инструкция_зр1 [ ; ] [ ,...n ] | EXTERNAL NAME <method specifier [ ; ] > }
<dml_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
Занятие 3
Реализация триггеров 299
У каждого триггера должно быть имя, соответствующее правилам для идентификаторов объектов.
В предложении ON указывается таблица или представление, для которого создается триггер. При удалении таблицы или представления все созданные для нее триггеры также будут удалены.
С помощью предложения WITH можно сделать следующее:
? Задать шифрование кода триггера при его создании.
? Задать контекст исполнения.
Предложение FOR задает тип триггера — AFTER или INSTEAD OF, а также событие^), запускающее триггер. При желании для триггера можно задать несколько событий.
Предложение WITH APPEND, которое необходимо на уровне совместимости 65, чаще всего не используется, так как большинство организаций к настоящему времени уже обновило свои базы данных SQL Server 6.5. Предложение NOT FOR REPLICATION рассматривается в главе 19.
В предложении AS указывается код, который нужно исполнить при запуске триггера. Рассмотрим применение триггеров на примере. В отделе по работе с персоналом любые изменения зарплаты сотрудников выполняются под строгим контролем. При этом отслеживается предыдущий и текущий уровень зарплаты, дата изменения зарплаты и имя сотрудника, который внес это изменение. Этот контроль можно реализовать с помощью приложения, но нет гарантии, что все изменения зарплаты пройдут через это приложение. Поэтому вы решили реализовать триггер на таблице Employee, запускающий операцию UPDATE и протоколирующий информацию об уровне зарплаты в таблицу EmployeeAudit:
CREATE TRIGGER tu_employeepayaudit ON dbo.Employee FOR UPDATE AS
DECLARE @now DATETIME
SET @now = getdate()
BEGIN TRY
INSERT INTO dbo.EmployeeAudit
(Rowlmage, PayRate, ChangeDate, ChangeUser)
SELECT 'BEFORE’, INSERTED.PayRate, @now, suser_sname()
FROM DELETED
INSERT INTO dbo EmployeeAudit
(Rowlmage, PayRate, ChangeDate, ChangeUser)
SELECT 'AFTER', INSERTED.PayRate, @now, suser_sname()
FROM INSERTED END TRY
BEGIN CATCH
-- Код для обработки ошибок ROLLBACK TRANSACTION END CATCH
300
Создание функций, хранимых процедур и триггеров
Глава 9
Рекурсивные и вложенные триггеры
Триггеры запускаются в ответ на DML-операцию и могут также выполнять дополнительные DML-операции, поэтому возможно, что триггер самозапустится или запустит другие триггеры.
Триггер, запускающий сам себя, называют рекурсивным триггером (recursive trigger). Например, допустим, что триггер UPDATE, созданный на таблице Customers, модифицирует столбец в этой таблице. Модификация в триггере повлечет его повторный запуск. Триггер снова модифицирует таблицу Customers, что вызывает его новый запуск. Такая рекурсия ведет к бесконечной цепочке транзакций, поэтому в SQL Server предусмотрен механизм управления рекурсивными триггерами. Параметр RECURSIVE TRIGGERS базы данных обычно имеет значение OFF, что запрещает рекурсию по умолчанию. Если нужно разрешить рекурсивный запуск триггеров, этот параметр нужно включить явно.
ПРИМЕЧАНИЕ Триггеры INSTEAD OF
Триггеры INSTEAD OF рекурсивно не запускаются.
Рекурсия также бывает косвенной. Например, операция UPDATE на таблице Customers запускает триггер, обновляющий таблицу Orders. Обновление таблицы Orders запускает триггер, который обновляет таблицу Customers. Косвенная рекурсия представляет собой набор вложенных триггеров (nested triggers).
Чаще всего вложенные триггеры используются, когда один триггер производит изменение, запускающее другой триггер. Установив значение параметра NESTED TRIGGERS равным 0 на уровне сервера, можно отключить все формы вложенных триггеров.
DDL-триггеры
В SQL Server 2005 появилась новая возможность создания триггеров для DDL-операций, например, когда создается таблица, добавляется новое имя входа для экземпляра или создается новая база данных. DDL-триггеры предназначены прежде всего для аудита и управления операциями, выполняемыми над базой данных. DDL-триггеры позволяют ограничивать выполнение DDL-операций, даже если у пользователя есть разрешение на их исполнение.
Например, нужно запретить всем пользователям, в том числе членам фиксированной серверной роли sysadmin, изменять и удалять таблицы в рабочей среде. Для этого можно создать DLL-триггер для событий ALTER TABLE и DROP TABLE, выполняющий откат этих операций и возвращающий сообщение о том, что у пользователей должно быть разрешение для изменения и удаления таблицы.
Общий синтаксис для создания DDL-триггера имеет следующий вид:
CREATE TRIGGER имя_триггера ON { ALL SERVER | DATABASE }
[ WITH <dll_tngger_option> [ ,...n ] ]
{ FOR | AFTER } { имя_события \ группа_событий } [ . n ]
Предыдущая << 1 .. 136 137 138 139 140 141 < 142 > 143 144 145 146 147 148 .. 343 >> Следующая