КАТЕГОРИИ: Архитектура-(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; Просмотров: 555; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |