Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Выполнение лабораторной работы. Создание триггеров в диалекте Transact SQL




Создание триггеров в диалекте Transact SQL

Триггер создается оператором языка SQL, имеющим следующий синтаксис:

create trigger <имя триггера>

on <имя таблицы>

{ for | after | instead of } { [ insert ] [, ] [ update ] [, ] [ delete ] }

as

<оператор>

 

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

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

Переопределение триггера осуществляет оператор alter trigger, синтаксис к которого аналогичен create trigger, для удаления триггера служит drop trigger <имя триггера>. СХП sp_helptrigger <имя таблицы> выводит информацию о триггера х, а sp_helptext <имя триггера> возвращает определение триггера. Работу конкретных или всех триггеров для таблицы можно приостановить и возобновить директивой alter table <имя таблицы> { enable | disable } trigger { all | <имя триггера> [, … ] } или операторами enable trigger и disable trigger.

Примеры триггеров:

(i) ограничение численности студентов в группе:

create trigger Вст_Студент

on Студент

instead of insert

as

if exists (select * from Студент

where Группа in (select Группа from inserted)

group by Группа

having count(Ном_Зач) >= 20)

print 'Слишком много студентов в группе'

else

insert into Студент select * from inserted

go

 

(ii) удаление группы, если в ней больше нет студентов:

create trigger Уд_Студент

on Студент

for delete

as

delete Группа

where Id in (select Группа from deleted) and not exists

(select * from Студент where Группа = Id)

go

 

(iii) контроль перерасхода стипендиального фонда:

create trigger Изм_Студент

on Студент

for update

as

if (select sum(Стипендия) from Студент) > 1000000

begin

print 'Стипендиальный фонд превышен'

rollback transaction

end

go

Рассмотренные триггеры относятся к классу DML, в них не разрешены инструкции:

{ alter | create | drop } { database | index };

alter table, затрагивающие столбцы, первичный ключ и unique.

Часто СУБД поддерживают DDL триггеры, а так же триггеры входа.

По аналогии с примерами, приведенными в п. 2, создать:

— триггеры каждого вида для каждой из операций, реализующие целостность данных;

— триггеры, реализующие вычисления в БД.




Поделиться с друзьями:


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


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



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




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