Слайды и текст доклада
Pic.1
Триггеры в MS SQL Server
Pic.2
Что такое триггер Триггер – это откомпилированная SQL-процедура Исполнение обусловлено наступлением определенных событий внутри реляционной базы данных Не имеет параметров Становится «одним целым» с …
Pic.4
Назначение триггеров Проверка корректности введенных данных и выполнение сложных ограничений целостности данных, которые трудно, если вообще возможно, поддерживать с помощью ограничений целостности, …
Pic.5
Когда нужны триггеры Чтобы оценить состояние таблицы до и после изменения данных и предпринять действия на основе этого различия. Для предотвращения действий, нарушающих бизнес-логику приложения …
Pic.6
DML-триггеры Триггер создается по одной таблице базы данных Может осуществлять доступ и к другим таблицам и объектам других баз данных. Триггеры нельзя создать по временным таблицам или системным …
Pic.7
DML - trigger Объект - таблица, VIEW Событие - insert, update, delete для таблицы и для VIEW. Время активации – до (вместо) или после выполнения оператора.
Pic.8
DML-триггеры Триггер – блок, выполняемый автоматически каждый раз, когда происходит определенное событие в отличие от процедуры, которая должна быть вызвана явно Событие – INSERT, UPDATE и DELETE для …
Pic.9
Когда нужны триггеры Для каскадных изменений в связанных таблицах БД (если их нельзя выполнить при помощи каскадных ограничений ссылочной целостности). Для предотвращения случайных или неправильных …
Pic.10
Еще… Журнализация и аудит. С помощью триггеров можно отслеживать изменения таблиц, для которых требуется поддержка повышенного уровня безопасности. Данные об изменении таблиц могут сохраняться в …
Pic.11
Когда не надо использовать триггеры Не нужно реализовывать триггерами возможности, достигаемые использованием декларативных средств СУБД (ограничения целостности или внешние ключи) Избегайте сложных …
Pic.12
Советы Не используйте триггеры, если можно применить проверочное ограничение CHECK Не используйте ограничение CHECK, если можно обойтись ограничением UNIQUE.
Pic.13
Основные параметры триггера Имя триггера Имя таблицы (или представления) Время срабатывания: AFTER(FOR) или INSTEAD OF Событие: INSERT, UPDATE, DELETE (TRUNCATE TABLE – это не удаление !) Тело …
Pic.14
Группировка событий Например, вы можете создать триггер, который будет активизироваться, когда происходит выполнение оператора UPDATE или INSERT, и такой триггер мы будем называть триггером …
Pic.15
Правила работы триггера Триггеры запускаются после завершения оператора, который вызвал их активизацию. Например, UPDATE-триггер не будет активизироваться, пока не будет выполнен оператор UPDATE. …
Pic.16
Правила работы триггера Триггер рассматривается как часть одной транзакции вместе с оператором, который вызывает его. Поэтому из триггера можно вызвать оператор отката, и этот оператор выполнит откат …
Pic.17
Пример CREATE TRIGGER trg ON my_table FOR INSERT, UPDATE, DELETE AS select "this is trigger"
Pic.18
Рекурсия Косвенная рекурсия При косвенной рекурсии приложение обновляет таблицу T1. Это событие вызывает срабатывание триггера TR1, обновляющего таблицу T2. Это вызывает срабатывание триггера T2 и …
Pic.19
При вызове триггера будут выполнены операторы SQL, указанные после ключевого слова AS. Вы можете поместить сюда несколько операторов, включая программные конструкции, такие как IF и WHILE.
Pic.20
Выбор типа триггера Триггеры INSTEAD OF используются для: Выборочного запрещения исполнения команды, для которой определен триггер (проверки пред-условия); Подсчета значений столбцов до завершения …
Pic.21
Циклы и вложенность SQL Server позволяет использовать вложенные триггеры, до 32 уровней вложенности. Если любой из вложенных триггеров выполняет операцию ROLLBACK, то последующие триггеры не …
Pic.22
Триггер INSTEAD OF Триггер INSTEAD OF выполняется вместо запуска оператора SQL. Тем самым переопределяется действие запускающего оператора. Можно задать по одному триггеру INSTEAD OF на один оператор …
Pic.23
Триггер AFTER Триггеры AFTER могут быть определены только в таблицах. Триггер AFTER активизируется после успешного выполнения всех операций, указанных в запускающем операторе или операторах SQL. Сюда …
Pic.24
Триггер AFTER Если у вас имеется несколько триггеров AFTER, определенных по таблице для определенного оператора или набора операторов, то вы можете задать, какой триггер будет активизирован первым и …
Pic.25
Порядок AFTER-триггеров sp_settriggerorder @triggername = 'AnotherTrigger', @order = 'first' sp_settriggerorder @triggername = 'MyTrigger', @order = 'last' …
Pic.26
Использование таблиц deleted и inserted При создании триггера вы имеете доступ к двум временным таблицам с именами deleted и inserted. Они хранятся в памяти, а не на диске. Эти две таблицы имеют …
Pic.27
Использование inserted, deleted inserted – вставленные значения (для INSERT, UPDATE) deleted – удаленные значения (для UPDATE, DELETE)
Pic.28
Использование таблиц deleted и inserted Таблица deleted содержит копии строк, на которые повлиял оператор DELETE или UPDATE. Строки, удаляемые из таблицы данного триггера, перемещаются в таблицу …
Pic.29
Использование таблиц deleted и inserted Поскольку оператор UPDATE обрабатывается как DELETE, после которого следует INSERT, то при использовании оператора UPDATE старые значения строк копируются в …
Pic.31
Создание триггера CREATE TRIGGER [ schema_name. ]trigger_name ON { table | view } { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } AS { sql_statement}
Pic.32
CREATE TRIGGER plus_1 ON table1 instead of insert AS insert table1 (id, col1) select id+1, col1 from inserted;
Pic.33
Триггер представляет собой специальный тип хранимых процедур, запускаемых сервером автоматически при попытке изменения данных в таблицах, с которыми триггеры связаны. Каждый триггер привязывается к …
Pic.34
Обработка исключений Команда ROLLBACK указывает серверу остановить обработку модификации и запретить транзакцию. Существует также команда RAISEERROR, с помощью которой вы можете отправить сообщение …
Pic.35
Обработка исключений сообщение об ошибке RAISERROR ('Error raised because of wrong data. ', -- Message text. 16, -- Severity. 1 -- State. ); Severity – число от 0 до 25 Определенный …
Pic.36
Функции об ошибках Функция ERROR_LINE() возвращает номер строки, в которой произошла ошибка. Функция ERROR_MESSAGE() возвращает текст сообщения, которое будет возвращено приложению. Текст содержит …
Pic.37
Пример триггера CREATE TRIGGER LowCredit ON Purchasing. PurchaseOrderHeader AFTER INSERT AS BEGIN DECLARE @creditrating tinyint, @vendorid int ; SELECT @creditrating = v. CreditRating, @vendorid = p. …
Pic.38
Управление триггерами Отключение/включение триггера: DISABLE/ENABLE TRIGGER trigger_name ON object_name Отключение/включение всех триггеров таблицы: DISABLE/ENABLE TRIGGER ALL ON object_name …
Pic.39
Изменение триггера ALTER TRIGGER tr_name ON on_board after UPDATE AS update on_board set iks='b' where id in (select id from inserted)
Pic.40
Удаление триггера DROP TRIGGER tr_name
Pic.41
Активация/деактивация триггера DISABLE TRIGGER {trigger_name [ ,. . . n ] | ALL } ON { object_name} ; ENABLE TRIGGER {trigger_name [ ,. . . n ] | ALL } ON { object_name}
Pic.42
Применение триггеров Защита Запрещение доступа в зависимости от значений данных Учет Ведение журналов изменений Целостность данных Сложные правила целостности Сложная ссылочная целостность …
Pic.44
DDL - trigger Триггеры DDL могут быть использованы в административных задачах, таких как аудит и регулирование операций базы данных. Действие этих триггеров распространяется на все команды одного …
Pic.45
DDL - триггеры Триггеры DDL, как и обычные триггеры, вызывают срабатывание хранимых процедур в ответ на событие. Срабатывают в ответ на разнообразные события языка определения данных (DDL). Эти …
Pic.46
Задачи для DDL - триггеров Предотвратить внесение определенных изменений в схему базы данных. Выполнить в базе данных некоторые действия в ответ на изменения в схеме базы данных. Записывать изменения …
Pic.47
CREATE TRIGGER trigger_name ON { DATABASE | ALL SERVER } { FOR | AFTER } { event_type | event_group } AS { sql_statement [ ; ] [ ,. . . n ] [ ; ] }
Pic.48
Создание/удаление DDL-тр CREATE TRIGGER ddl_trig_database ON ALL SERVER FOR CREATE_DATABASE AS PRINT 'Database Created. ' DROP TRIGGER ddl_trig_database ON ALL SERVER;
Pic.49
DDL - trigger CREATE TRIGGER safety ON DATABASE FOR DROP_TABLE, ALTER_TABLE AS PRINT 'You must disable Trigger "safety" to drop or alter tables!' ROLLBACK ;
Pic.50
Для одной инструкции Transact-SQL можно создать несколько триггеров DDL. Триггер DDL и инструкция, приводящая к его срабатыванию, выполняются в одной транзакции. Откат событий ALTER DATABASE, …
Pic.51
Logon - trigger Триггеры входа выполняют хранимые процедуры в ответ на событие LOGON. Это событие вызывается при установке пользовательского сеанса с экземпляром SQL Server. Триггеры входа …
Pic.52
Logon - trigger CREATE TRIGGER trigger_name ON ALL SERVER { FOR| AFTER } LOGON AS { sql_statement }
Скачать презентацию
Если вам понравился сайт и размещенные на нем материалы, пожалуйста, не забывайте поделиться этой страничкой в социальных сетях и с друзьями! Спасибо!