Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Примеры. Содержимое таблиц inserted и deleted в зависимости от вида триггера

Содержимое таблиц INSERTED и DELETED в зависимости от вида триггера

Алгоритм обработки триггеров

Общий синтаксис создания триггера

Виды триггеров

Сравнение триггеров и хранимых процедур

Лабораторная работа №8. Триггеры

Хранимые процедуры Триггеры
Являются самостоятельным объектом базы данных Привязываются к таблице или виду
Явно вызываются на выполнение командой EXECUTE Реагируют на события, связанные с таблицей-владельцем или видом-владельцем
Могут иметь входные и/или выходные параметры, коды возврата Не имеют входных/выходных параметров и кодов возврата
Могут выполняться в отдельной транзакции Выполняются в той же транзакции, в которой осуществляются изменения таблицы-владельца или вида-владельца.
Объект Действие Триггер
Таблица/вид Вставка строк INSERT Вместо вставки строк INSTEAD OF
После вставки строк FOR или AFTER
Модификация строк UPDATE Вместо модификации строк INSTEAD OF
После модификации строк FOR или AFTER
Удаление строк DELETE Вместо удаления строк INSTEAD OF
После удаления строк FOR или AFTER

 

CREATE TRIGGER <Имя_триггера>

ON <Имя_таблицы_или_вида>

{FOR|AFTER|INSTEAD OF} {[INSERT] [,] [UPDATE] [,] [DELETE]}

AS <SQL-выражения, составляющие тело триггера>

 

Вид триггера Таблицы INSERTED и DELETED
INSTEAD OF INSERT INSERTED содержит вставляемые в таблицу записи. DELETED пуста.
FOR INSERT INSERTED содержит вставленные в таблицу записи. DELETED пуста.
INSTEAD OF UPDATE INSERTED содержит новые значения модифицируемых записей. DELETED содержит старые значения модифицируемых записей.
FOR UPDATE INSERTED содержит новые значения модифицированных записей. DELETED содержит старые значения модифицированных записей.
INSTEAD OF DELETE INSERTED пуста. DELETED содержит удаляемые записи.
FOR DELETE INSERTED пуста. DELETED содержит удаленные записи.

Таблицы INSERTED и DELETED – виртуальные, существуют только в период выполнения триггера.

 

--6.1. Триггер на поддержание актуального количества товаров при добавлении поставок

CREATE TRIGGER tr_supply_fi

ON supply

FOR INSERT

AS

UPDATE detail

SET detail_quantity = d.detail_quantity + i.supply_quantity

FROM detail d JOIN INSERTED i ON d.detail_id = i.detail_id

 

--6.2. Триггер на поддержание актуального количества товаров при удалении поставок

CREATE TRIGGER tr_supply_fd

ON supply

AFTER DELETE

AS

UPDATE detail

SET detail_quantity = detail.detail_quantity - DELETED.supply_quantity

FROM detail JOIN DELETED ON detail.detail_id = DELETED.detail_id

 

--6.3. Триггер на поддержание актуального количества товаров при отпуске деталей в цеха

CREATE TRIGGER tr_delivery_string_fi

ON delivery_string

FOR INSERT

AS

UPDATE detail

SET detail_quantity = d.detail_quantity - i.delivery_quantity

FROM detail d JOIN INSERTED i ON d.detail_id = i.detail_id

 

 

--6.4. Проверка допустимости значения даты поставки при добавлении новой поставки

CREATE TRIGGER tr_supply_ii

ON supply

INSTEAD OF INSERT

AS

IF EXISTS (SELECT *

FROM INSERTED

WHERE supply_date > GETDATE())

BEGIN

RAISERROR ('Недопустимое значение даты поставки!', 16, 1)

ROLLBACK TRAN

END

ELSE

INSERT INTO supply (supplier_id, detail_id, supply_date, supply_quantity)

SELECT supplier_id, detail_id, supply_date, supply_quantity

FROM INSERTED

 

--6.5. Проверка допустимости значения даты поставки при редактировании существующей поставки

CREATE TRIGGER tr_supply_iu

ON supply

INSTEAD OF UPDATE

AS

IF UPDATE (supply_date)

IF EXISTS (SELECT *

FROM INSERTED

WHERE supply_date > GETDATE())

BEGIN

RAISERROR (' Недопустимое значение даты поставки!', 16, 1)

ROLLBACK TRAN

END

ELSE

UPDATE supply

SET supplier_id = i.supplier_id,

detail_id = i.detail_id,

supply_date = i.supply_date,

supply_quantity = i.supply_quantity

FROM supply s JOIN INSERTED i on s.supply_id = i.supply_id

 

<== предыдущая лекция | следующая лекция ==>
Финансовый план. Организационный план | Права и обязанности работодателя
Поделиться с друзьями:


Дата добавления: 2015-05-10; Просмотров: 372; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.017 сек.