Разделы презентаций


Презентация на тему Триггеры в MS SQL Server

Содержание

Что такое триггер Триггер – это откомпилированная SQL-процедура Исполнение обусловлено наступлением определенных событий внутри реляционной базы данных Не имеет параметров Становится «одним целым» с вызвавшей операцией
Триггеры в MS SQL Server Что такое триггер Триггер – это откомпилированная SQL-процедура Исполнение обусловлено наступлением определенных событий внутри реляционной базы DDL-события: Create, Drop, Alter  Logon  DML-события: Insert, Delete, Update Виды триггеров Назначение триггеров Проверка корректности введенных данных и выполнение сложных ограничений целостности данных, которые трудно, если вообще Когда нужны триггеры Чтобы оценить состояние таблицы до и после изменения данных и предпринять действия DML-триггеры Триггер создается по одной таблице базы данных Может осуществлять доступ и к другим таблицам DML - trigger Объект - таблица, VIEW Событие - insert, update, delete для таблицы и  для VIEW. Время активации DML-триггеры Триггер – блок, выполняемый автоматически каждый раз, когда происходит определенное событие в отличие от Когда нужны триггеры Для каскадных изменений в связанных таблицах БД (если их нельзя выполнить при Еще… Журнализация и аудит. С помощью триггеров можно отслеживать изменения таблиц, для которых требуется поддержка Когда не надо использовать триггеры Не нужно реализовывать триггерами возможности, достигаемые использованием декларативных средств СУБД Советы Не используйте триггеры, если можно применить проверочное ограничение CHECK Не используйте ограничение CHECK, если можно обойтись ограничением UNIQUE. Основные параметры триггера Имя триггера Имя таблицы (или представления) Время срабатывания: 
 AFTER(FOR) или INSTEAD Группировка событий Например, вы можете создать триггер, который будет активизироваться, когда происходит выполнение оператора UPDATE или INSERT, Правила работы триггера Триггеры запускаются после завершения оператора, который вызвал их активизацию. Например, UPDATE-триггер не будет Правила работы триггера Триггер рассматривается как часть одной транзакции вместе с оператором, который вызывает его. Пример CREATE TRIGGER trg ON my_table  FOR INSERT, UPDATE, DELETE AS  select Рекурсия Косвенная рекурсия При косвенной рекурсии приложение обновляет таблицу T1. Это событие вызывает срабатывание триггера TR1, При вызове триггера будут выполнены операторы SQL, указанные после ключевого слова AS. Вы можете поместить Выбор типа триггера Триггеры INSTEAD OF используются для: Выборочного запрещения исполнения команды, для которой определен Циклы и вложенность SQL Server позволяет использовать вложенные триггеры, до 32 уровней вложенности. Если любой Триггер INSTEAD OF Триггер INSTEAD OF выполняется вместо запуска оператора SQL. Тем самым переопределяется действие запускающего оператора. Триггер AFTER Триггеры AFTER могут быть определены только в таблицах. Триггер AFTER активизируется после успешного выполнения всех операций, Триггер AFTER Если у вас имеется несколько триггеров AFTER, определенных по таблице для определенного оператора или набора Порядок AFTER-триггеров sp_settriggerorder @triggername = 'AnotherTrigger', @order = 'first'  sp_settriggerorder @triggername = 'MyTrigger', @order Использование таблиц deleted и inserted При создании триггера вы имеете доступ к двум временным таблицам Использование inserted, deleted inserted – вставленные значения (для INSERT, UPDATE) deleted – удаленные значения (для Использование таблиц deleted и inserted Таблица deleted содержит копии строк, на которые повлиял оператор DELETE или UPDATE. Использование таблиц deleted и inserted Поскольку оператор UPDATE обрабатывается как DELETE, после которого следует INSERT, то при использовании оператора UPDATE старые Создание триггера CREATE TRIGGER [ schema_name.]trigger_name ON 
 { table | view } 
 { CREATE TRIGGER plus_1  ON table1  instead of insert AS  insert table1 Триггер представляет собой специальный тип хранимых процедур, запускаемых сервером автоматически при попытке изменения данных в Обработка исключений Команда ROLLBACK указывает серверу остановить обработку модификации и запретить транзакцию. Существует также команда RAISEERROR, с помощью Обработка исключений
 сообщение об ошибке   RAISERROR ('Error raised because of wrong data.', -- Message text. Функции об ошибках Функция ERROR_LINE() возвращает номер строки, в которой произошла ошибка. Функция ERROR_MESSAGE() возвращает Пример триггера CREATE TRIGGER LowCredit ON  Purchasing.PurchaseOrderHeader AFTER INSERT AS  BEGIN DECLARE @creditrating Управление триггерами Отключение/включение триггера: DISABLE/ENABLE TRIGGER trigger_name ON object_name Отключение/включение всех триггеров таблицы: DISABLE/ENABLE TRIGGER Изменение триггера ALTER TRIGGER tr_name ON on_board  after  UPDATE  AS  update Удаление триггера DROP TRIGGER tr_name Активация/деактивация триггера DISABLE TRIGGER {trigger_name [ ,...n ] | ALL } ON { object_name} ; Применение триггеров Защита Запрещение доступа в зависимости от значений данных Учет Ведение журналов изменений Целостность Типы триггеров DDL - trigger Триггеры DDL могут быть использованы в административных задачах, таких как аудит и DDL - триггеры Триггеры DDL, как и обычные триггеры, вызывают срабатывание хранимых процедур в ответ Задачи для DDL - триггеров Предотвратить внесение определенных изменений в схему базы данных. Выполнить в CREATE TRIGGER trigger_name  ON { DATABASE | ALL SERVER }  { FOR Создание/удаление DDL-тр CREATE TRIGGER ddl_trig_database  ON ALL SERVER  FOR CREATE_DATABASE  AS DDL - trigger CREATE TRIGGER safety 
 ON DATABASE 
 FOR DROP_TABLE, ALTER_TABLE AS Для одной инструкции Transact-SQL можно создать несколько триггеров DDL.  Триггер DDL и инструкция, Logon - trigger Триггеры входа выполняют хранимые процедуры в ответ на событие LOGON. Это событие Logon - trigger CREATE TRIGGER trigger_name  ON ALL SERVER  { FOR| AFTER }
Слайды и текст этой презентации

Слайд 1 Триггеры в MS SQL Server

Триггеры в MS SQL Server

Слайд 2 Что такое триггер
Триггер – это откомпилированная SQL-процедура
Исполнение обусловлено наступлением

Что такое триггерТриггер – это откомпилированная SQL-процедураИсполнение обусловлено наступлением определенных событий внутри реляционной базы данныхНе имеет

определенных событий внутри реляционной базы данных
Не имеет параметров
Становится

«одним целым» с вызвавшей операцией


Слайд 3

DDL-события:
Create,
Drop,
Alter

Logon

DML-события:
Insert,
Delete,
Update
Виды триггеров
Триггеры
Logon-триггеры
DDL-триггеры
DML-триггеры

Появились в SQL Server 2005

DDL-события:Create,Drop,AlterLogonDML-события:Insert,Delete,UpdateВиды триггеровТриггерыLogon-триггерыDDL-триггерыDML-триггерыПоявились в SQL Server 2005

Слайд 4 Назначение триггеров
Проверка корректности введенных данных и выполнение сложных ограничений

Назначение триггеровПроверка корректности введенных данных и выполнение сложных ограничений целостности данных, которые трудно, если вообще возможно,

целостности данных, которые трудно, если вообще возможно, поддерживать с

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

сведений о внесенных изменениях и тех лицах, которые их выполнили.
Автоматического оповещения других модулей о том, что делать в случае изменения информации содержащейся в таблице БД.
Для реализации так называемых "бизнес правил".
Для организации каскадных воздействий на таблицы БД (могут действовать не только при равенстве значений).
Поддержка репликации.

Слайд 5 Когда нужны триггеры
Чтобы оценить состояние таблицы до и

Когда нужны триггерыЧтобы оценить состояние таблицы до и после изменения данных и предпринять действия на

после изменения данных и предпринять действия на основе этого

различия.

Для предотвращения действий, нарушающих бизнес-логику приложения
Несколько DML-триггеров одинакового типа (INSERT,

UPDATE или DELETE) для таблицы позволяют предпринять несколько различных действий в ответ на одну инструкцию изменения данных.

Слайд 6 DML-триггеры
Триггер создается по одной таблице базы данных
Может осуществлять

DML-триггерыТриггер создается по одной таблице базы данныхМожет осуществлять доступ и к другим таблицам и объектам

доступ и к другим таблицам и объектам других баз

данных.
Триггеры нельзя создать по временным таблицам или системным таблицам,

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

Слайд 7 DML - trigger
Объект - таблица, VIEW
Событие - insert, update, delete для таблицы

DML - triggerОбъект - таблица, VIEWСобытие - insert, update, delete для таблицы и  для VIEW.Время активации – до (вместо)

и  для VIEW.
Время активации – до (вместо) или после

выполнения оператора.


Слайд 8 DML-триггеры
Триггер – блок, выполняемый автоматически каждый раз, когда

DML-триггерыТриггер – блок, выполняемый автоматически каждый раз, когда происходит определенное событиев отличие от процедуры, которая

происходит определенное событие
в отличие от процедуры, которая должна быть

вызвана явно
Событие – INSERT, UPDATE и DELETE для таблицы, представления
для

запроса нельзя определить триггер

Слайд 9 Когда нужны триггеры
Для каскадных изменений в связанных таблицах

Когда нужны триггерыДля каскадных изменений в связанных таблицах БД (если их нельзя выполнить при помощи

БД (если их нельзя выполнить при помощи каскадных ограничений

ссылочной целостности).
Для предотвращения случайных или неправильных операций INSERT, UPDATE и

DELETE
Для реализации ограничений целостности, которые нельзя определить при помощи ограничения CHECK. DML-триггеры могут ссылаться на столбцы других таблиц.

Слайд 10 Еще…
Журнализация и аудит. С помощью триггеров можно отслеживать

Еще…Журнализация и аудит. С помощью триггеров можно отслеживать изменения таблиц, для которых требуется поддержка повышенного

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

Данные об изменении таблиц могут сохраняться в других таблицах и

включать, например, идентификатор пользователя, время операции обновления; сами обновляемые данные и т. д.
Согласование и очистка данных. С любым простым оператором SQL, обновляющим некоторую таблицу, можно связать триггеры, производящие соответствующие обновления других таблиц.
Операции, не связанные с изменением базы данных. В триггерах могут выполняться не только операции обновления базы данных. Стандарт SQL позволяет определять хранимые процедуры (которые могут вызываться из триггеров), посылающие электронную почту, печатающие документы и т. д.

Слайд 11 Когда не надо использовать триггеры
Не нужно реализовывать триггерами

Когда не надо использовать триггерыНе нужно реализовывать триггерами возможности, достигаемые использованием декларативных средств СУБД (ограничения

возможности, достигаемые использованием декларативных средств СУБД (ограничения целостности или

внешние ключи)
Избегайте сложных цепочек триггеров


Слайд 12 Советы
Не используйте триггеры, если можно применить проверочное ограничение CHECK
Не используйте

СоветыНе используйте триггеры, если можно применить проверочное ограничение CHECKНе используйте ограничение CHECK, если можно обойтись ограничением UNIQUE.

ограничение CHECK, если можно обойтись ограничением UNIQUE.


Слайд 13 Основные параметры триггера
Имя триггера
Имя таблицы (или представления)
Время срабатывания:

Основные параметры триггераИмя триггераИмя таблицы (или представления)Время срабатывания: 
 AFTER(FOR) или INSTEAD OFСобытие: INSERT, UPDATE,

AFTER(FOR) или INSTEAD OF
Событие: INSERT, UPDATE, DELETE  (TRUNCATE TABLE

– это не удаление !)
Тело триггера
Последовательность срабатывания однотипных триггеров произвольна
!


Слайд 14 Группировка событий
Например, вы можете создать триггер, который будет

Группировка событийНапример, вы можете создать триггер, который будет активизироваться, когда происходит выполнение оператора UPDATE или INSERT, и

активизироваться, когда происходит выполнение оператора UPDATE или INSERT, и такой триггер

мы будем называть триггером UPDATE/INSERT. Вы можете даже создать триггер, который

будет активизироваться при возникновении любого из трех событий модификации данных (триггер UPDATE/INSERT/DELETE).

Слайд 15 Правила работы триггера
Триггеры запускаются после завершения оператора, который

Правила работы триггераТриггеры запускаются после завершения оператора, который вызвал их активизацию. Например, UPDATE-триггер не будет активизироваться,

вызвал их активизацию. Например, UPDATE-триггер не будет активизироваться, пока не

будет выполнен оператор UPDATE.
Если какой-либо оператор пытается выполнить операцию, которая нарушает

какое-либо ограничение по таблице или является причиной какой-то другой ошибки, то связанный с ним триггер не будет активизирован.


Слайд 16 Правила работы триггера
Триггер рассматривается как часть одной транзакции

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

вместе с оператором, который вызывает его. Поэтому из триггера

можно вызвать оператор отката, и этот оператор выполнит откат как

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


Слайд 17 Пример
CREATE TRIGGER trg ON my_table
FOR INSERT, UPDATE,

ПримерCREATE TRIGGER trg ON my_table FOR INSERT, UPDATE, DELETE AS select

DELETE AS
select "this is trigger"


Слайд 18 Рекурсия
Косвенная рекурсия
При косвенной рекурсии приложение обновляет таблицу T1. Это

РекурсияКосвенная рекурсияПри косвенной рекурсии приложение обновляет таблицу T1. Это событие вызывает срабатывание триггера TR1, обновляющего таблицу

событие вызывает срабатывание триггера TR1, обновляющего таблицу T2. Это вызывает

срабатывание триггера T2 и обновление таблицы T1.
Прямая рекурсия
При прямой рекурсии

приложение обновляет таблицу T1. Это событие вызывает срабатывание триггера TR1, обновляющего таблицу T1. Поскольку таблица T1 уже была обновлена, триггер TR1 срабатывает снова и т. д.


Слайд 19
При вызове триггера будут выполнены операторы SQL, указанные

При вызове триггера будут выполнены операторы SQL, указанные после ключевого слова AS. Вы можете поместить сюда

после ключевого слова AS. Вы можете поместить сюда несколько операторов,

включая программные конструкции, такие как IF и WHILE.


Слайд 20 Выбор типа триггера
Триггеры INSTEAD OF используются для:
Выборочного запрещения

Выбор типа триггераТриггеры INSTEAD OF используются для:Выборочного запрещения исполнения команды, для которой определен триггер (проверки

исполнения команды, для которой определен триггер (проверки пред-условия);
Подсчета значений

столбцов до завершения команды INSERT или UPDATE.
Триггеры AFTER используются для:
Учета

выполненных операций;
Проверки пост-условий исполнения команды.


Слайд 21 Циклы и вложенность
SQL Server позволяет использовать вложенные триггеры,

Циклы и вложенностьSQL Server позволяет использовать вложенные триггеры, до 32 уровней вложенности. Если любой из

до 32 уровней вложенности. Если любой из вложенных триггеров

выполняет операцию ROLLBACK, то последующие триггеры не запускаются.
Запуск триггеров

отменяется, если формируется бесконечный цикл.

Слайд 22 Триггер INSTEAD OF
Триггер INSTEAD OF выполняется вместо запуска оператора SQL. Тем

Триггер INSTEAD OFТриггер INSTEAD OF выполняется вместо запуска оператора SQL. Тем самым переопределяется действие запускающего оператора. Можно задать

самым переопределяется действие запускающего оператора.
Можно задать по одному

триггеру INSTEAD OF на один оператор INSERT, UPDATE или DELETE.
Триггер INSTEAD OF можно задать для таблицы

и/или представления
Можно использовать каскады триггеров INSTEAD OF, определяя представления поверх представлений, где каждое представление имеет отдельный триггер INSTEAD OF.
Триггеры INSTEAD OF не разрешается применять для модифицируемых представлений, содержащих опцию WITH CHECK.

Слайд 23 Триггер AFTER
Триггеры AFTER могут быть определены только в таблицах.
Триггер AFTER активизируется

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

после успешного выполнения всех операций, указанных в запускающем операторе

или операторах SQL. Сюда включается весь каскад действий по ссылкам

и все проверки ограничений.

Слайд 24 Триггер AFTER
Если у вас имеется несколько триггеров AFTER, определенных по

Триггер AFTERЕсли у вас имеется несколько триггеров AFTER, определенных по таблице для определенного оператора или набора операторов,

таблице для определенного оператора или набора операторов, то вы

можете задать, какой триггер будет активизирован первым и какой триггер

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

Слайд 25 Порядок AFTER-триггеров
sp_settriggerorder @triggername = 'AnotherTrigger', @order = 'first'

Порядок AFTER-триггеровsp_settriggerorder @triggername = 'AnotherTrigger', @order = 'first' sp_settriggerorder @triggername = 'MyTrigger', @order = 'last'


sp_settriggerorder @triggername = 'MyTrigger', @order = 'last'
sp_settriggerorder

@triggername = 'MyOtherTrigger', @order = 'none'
sp_settriggerorder @triggername =

'YetAnotherTrigger', @order = 'none'

Слайд 26 Использование таблиц deleted и inserted
При создании триггера вы

Использование таблиц deleted и insertedПри создании триггера вы имеете доступ к двум временным таблицам с

имеете доступ к двум временным таблицам с именами deleted

и inserted. Они хранятся в памяти, а не на диске.
Эти

две таблицы имеют одинаковую структуру с таблицей (одинаковые колонки и типы данных), по которой определяется данный триггер.

Слайд 27 Использование inserted, deleted
inserted – вставленные значения (для INSERT,

Использование inserted, deletedinserted – вставленные значения (для INSERT, UPDATE)deleted – удаленные значения (для UPDATE, DELETE)Специальные таблицы:

UPDATE)
deleted – удаленные значения (для UPDATE, DELETE)
Специальные таблицы:


Слайд 28 Использование таблиц deleted и inserted
Таблица deleted содержит копии

Использование таблиц deleted и insertedТаблица deleted содержит копии строк, на которые повлиял оператор DELETE или UPDATE. Строки,

строк, на которые повлиял оператор DELETE или UPDATE. Строки, удаляемые из

таблицы данного триггера, перемещаются в таблицу deleted. После этого к

данным таблицы deleted можно осуществлять доступ из данного триггера.
Таблица inserted содержит копии строк, добавленных к таблице данного триггера при выполнении оператора INSERT или UPDATE. Эти строки добавляются одновременно в таблицу триггера и в таблицу inserted.

Слайд 29 Использование таблиц deleted и inserted
Поскольку оператор UPDATE обрабатывается как DELETE, после

Использование таблиц deleted и insertedПоскольку оператор UPDATE обрабатывается как DELETE, после которого следует INSERT, то при использовании оператора UPDATE старые значения

которого следует INSERT, то при использовании оператора UPDATE старые значения строк копируются

в таблицу deleted, а новые значения строк – в таблицу

триггера и в таблицу inserted.
Триггер INSERT => deleted пуст
Триггер DELETE => inserted пуст
но сообщение об ошибке не возникнет !


Слайд 31 Создание триггера
CREATE TRIGGER [ schema_name.]trigger_name ON { table

Создание триггераCREATE TRIGGER [ schema_name.]trigger_name ON 
 { table | view } 
 { FOR

| view } { FOR | AFTER | INSTEAD

OF } { [ INSERT ] [ , ] [

UPDATE ] [ , ] [ DELETE ] } AS { sql_statement}


Слайд 32
CREATE TRIGGER plus_1
ON table1
instead of insert
AS

CREATE TRIGGER plus_1 ON table1 instead of insertAS insert table1 (id, col1) select id+1, col1


insert table1 (id, col1) select id+1, col1 from inserted;


Слайд 33
Триггер представляет собой специальный тип хранимых процедур, запускаемых сервером

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

автоматически при попытке изменения данных в таблицах, с которыми триггеры связаны.

Каждый триггер привязывается к конкретной таблице. Все производимые им модификации данных рассматриваются

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


Слайд 34 Обработка исключений
Команда ROLLBACK указывает серверу остановить обработку модификации и

Обработка исключенийКоманда ROLLBACK указывает серверу остановить обработку модификации и запретить транзакцию.Существует также команда RAISEERROR, с помощью которой вы

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

сообщение об ошибке пользователю.
TRY…CATCH 


Слайд 35 Обработка исключений сообщение об ошибке
  RAISERROR ('Error raised because of

Обработка исключений
 сообщение об ошибке  RAISERROR ('Error raised because of wrong data.', -- Message text.   

wrong data.', -- Message text.   

             16, -- Severity.
               1 -- State.);



Severity – число от 0 до 25 Определенный пользователем уровень серьезности ошибки. 0 до 18 может указать любой пользователь. 19 до 25 могут быть указаны только sysadmin 20 до 25 считаются неустранимыми - соединение с клиентом обрывается и регистрируется сообщение об ошибке в журналах приложений и ошибок.
State Целое число от 0 до 255. Отрицательные значения или значения больше 255 приводят к формированию ошибки. Если одна и та же пользовательская ошибка возникает в нескольких местах, то при помощи уникального номера состояния для каждого местоположения можно определить, в каком месте кода появилась ошибка.

Слайд 36 Функции об ошибках
Функция ERROR_LINE() возвращает номер строки, в

Функции об ошибкахФункция ERROR_LINE() возвращает номер строки, в которой произошла ошибка.Функция ERROR_MESSAGE() возвращает текст сообщения,

которой произошла ошибка.
Функция ERROR_MESSAGE() возвращает текст сообщения, которое будет

возвращено приложению. Текст содержит значения таких подставляемых параметров, как длина,

имена объектов или время.
ERROR_NUMBER() возвращает номер ошибки.
Функция ERROR_PROCEDURE() возвращает имя хранимой процедуры или триггера, в котором произошла ошибка. Эта функция возвращает значение NULL, если данная ошибка не была совершена внутри хранимой процедуры или триггера.
ERROR_SEVERITY() возвращает уровень серьезности ошибки.
ERROR_STATE() возвращает состояние.

Слайд 37 Пример триггера
CREATE TRIGGER LowCredit ON
Purchasing.PurchaseOrderHeader AFTER INSERT

Пример триггераCREATE TRIGGER LowCredit ON Purchasing.PurchaseOrderHeader AFTER INSERT AS BEGINDECLARE @creditrating tinyint, @vendorid int ;SELECT

AS
BEGIN
DECLARE @creditrating tinyint, @vendorid int ;

SELECT @creditrating =

v.CreditRating, @vendorid = p.VendorID
FROM Purchasing.PurchaseOrderHeader p JOIN inserted

i ON p.PurchaseOrderID = i.PurchaseOrderID JOIN Purchasing.Vendor v ON v.VendorID = i.VendorID ;

IF @creditrating = 5 RAISERROR ('This vendor''s credit rating is too low to accept new purchase orders.', 16, 1) ;
END

Слайд 38 Управление триггерами
Отключение/включение триггера:
DISABLE/ENABLE TRIGGER trigger_name ON object_name
Отключение/включение всех

Управление триггерамиОтключение/включение триггера:DISABLE/ENABLE TRIGGER trigger_name ON object_nameОтключение/включение всех триггеров таблицы:DISABLE/ENABLE TRIGGER ALL ON object_nameИзменение триггера:ALTER

триггеров таблицы:
DISABLE/ENABLE TRIGGER ALL ON object_name
Изменение триггера:
ALTER TRIGGER trigger_name


Удаление триггера:
DROP TRIGGER trigger_name


Слайд 39 Изменение триггера
ALTER TRIGGER tr_name
ON on_board
after UPDATE

Изменение триггераALTER TRIGGER tr_nameON on_board after UPDATE AS update on_board set iks='b' where id in


AS
update on_board set iks='b' where id in (select

id from inserted)


Слайд 40 Удаление триггера
DROP TRIGGER tr_name

Удаление триггераDROP TRIGGER tr_name

Слайд 41 Активация/деактивация триггера
DISABLE TRIGGER {trigger_name [ ,...n ] |

Активация/деактивация триггераDISABLE TRIGGER {trigger_name [ ,...n ] | ALL } ON { object_name} ;ENABLE TRIGGER

ALL } ON { object_name} ;
ENABLE TRIGGER {trigger_name [

,...n ] | ALL } ON { object_name}


Слайд 42 Применение триггеров
Защита
Запрещение доступа в зависимости от значений данных
Учет
Ведение

Применение триггеровЗащитаЗапрещение доступа в зависимости от значений данныхУчетВедение журналов измененийЦелостность данныхСложные правила целостностиСложная ссылочная целостностьПроизводные

журналов изменений
Целостность данных
Сложные правила целостности
Сложная ссылочная целостность
Производные данные
автоматическое вычисление

значений


Слайд 43 Типы триггеров

Типы триггеров

Слайд 44 DDL - trigger
Триггеры DDL могут быть использованы в

DDL - triggerТриггеры DDL могут быть использованы в административных задачах, таких как аудит и регулирование

административных задачах, таких как аудит и регулирование операций базы

данных.
Действие этих триггеров распространяется на все команды одного типа во

всей базе данных или на всем сервере.


Слайд 45 DDL - триггеры
Триггеры DDL, как и обычные триггеры,

DDL - триггерыТриггеры DDL, как и обычные триггеры, вызывают срабатывание хранимых процедур в ответ на

вызывают срабатывание хранимых процедур в ответ на событие.
Срабатывают

в ответ на разнообразные события языка определения данных (DDL).
Эти

события в основном соответствуют инструкциям языка Transact-SQL, начинающимся ключевыми словами CREATE, ALTER или DROP.

Слайд 46 Задачи для DDL - триггеров
Предотвратить внесение определенных изменений

Задачи для DDL - триггеровПредотвратить внесение определенных изменений в схему базы данных.Выполнить в базе данных

в схему базы данных.
Выполнить в базе данных некоторые действия

в ответ на изменения в схеме базы данных.
Записывать изменения или

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


Слайд 47
CREATE TRIGGER trigger_name
ON { DATABASE | ALL

CREATE TRIGGER trigger_name ON { DATABASE | ALL SERVER } { FOR | AFTER }

SERVER }
{ FOR | AFTER } { event_type

| event_group }
AS
{ sql_statement [ ; ] [

,...n ] [ ; ] }


Слайд 48 Создание/удаление DDL-тр
CREATE TRIGGER ddl_trig_database
ON ALL SERVER
FOR

Создание/удаление DDL-трCREATE TRIGGER ddl_trig_database ON ALL SERVER FOR CREATE_DATABASE AS  PRINT 'Database Created.'DROP TRIGGER

CREATE_DATABASE
AS
PRINT 'Database Created.'


DROP TRIGGER ddl_trig_database
ON

ALL SERVER;



Слайд 49 DDL - trigger
CREATE TRIGGER safety ON DATABASE FOR

DDL - triggerCREATE TRIGGER safety 
 ON DATABASE 
 FOR DROP_TABLE, ALTER_TABLE AS 
 PRINT

DROP_TABLE, ALTER_TABLE AS PRINT 'You must disable Trigger "safety"

to drop or alter tables!' ROLLBACK ;


Слайд 50
Для одной инструкции Transact-SQL можно создать несколько триггеров

Для одной инструкции Transact-SQL можно создать несколько триггеров DDL. Триггер DDL и инструкция, приводящая к

DDL.
Триггер DDL и инструкция, приводящая к его срабатыванию,

выполняются в одной транзакции.
Откат событий ALTER DATABASE, возникших внутри

триггера DDL, невозможен.
Триггеры DDL выполняются только после завершения инструкции Transact-SQL. Триггеры DDL нельзя использовать в качестве триггеров INSTEAD OF.
Триггеры DDL не создают таблицы inserted и deleted.

Слайд 51 Logon - trigger
Триггеры входа выполняют хранимые процедуры в

Logon - triggerТриггеры входа выполняют хранимые процедуры в ответ на событие LOGON. Это событие вызывается

ответ на событие LOGON. Это событие вызывается при установке

пользовательского сеанса с экземпляром SQL Server.
Триггеры входа срабатывают после

завершения этапа проверки подлинности при входе, но перед тем, как пользовательский сеанс реально устанавливается.

Слайд 52 Logon - trigger
CREATE TRIGGER trigger_name
ON ALL SERVER

Logon - triggerCREATE TRIGGER trigger_name ON ALL SERVER { FOR| AFTER } LOGON AS {


{ FOR| AFTER } LOGON
AS { sql_statement }


  • Имя файла: triggery-v-ms-sql-server.pptx
  • Количество просмотров: 76
  • Количество скачиваний: 0