CREATE TRIGGER INS_Stud ON Students
INSTEAD OF INSERT AS
declare @num int, @fam char(20), @nam char(20), @stip decimal(4,2)
select @fam = ins.sfam from inserted ins
select @nam = ins.snam from inserted ins
select @stip = ins.stip from inserted ins
select @num = max(snum) from students
INSERT INTO Students(snum, sfam, snam,stip)
VALUES (@num+1, @fam, @nam, @stip)
2. CREATE TRIGGER ST_Del ON Students
INSTEAD OF DELETE AS
declare @num int
select @num = del.snum from deleted del
if EXISTS (select * from usp where snum=@num)
delete from usp where snum=@num
delete from students where snum=@num
кроме поддержания ссылочной целостности триггеры могут использоваться для формирования каскадного взаимодействия, например, при выполнении операции вставки в таблицу Students информация об этом студенте должна быть занесена и в usp.
3. CREATE TRIGGER INS_S ON Students
FOR INSERT AS
declare @k_m int, @k_s int
select @k_m = max(unum) from usp
select @k_s = ins.snum from inserted ins
INSERT INTO usp(unum, snum)
VALUES (@k_m+1, @k_s)
Триггеры могут использоваться для ведения статистики изменения информации в БД.
4. подсчет количества экзаменов, сданных в каждый день
CREATE TRIGGER OC_DAY ON usp
FOR INSERT AS
If exists (select * from stat where dat=GetDate())
UPDATE stat set kol_vo = kol_vo+1 where dat=GetDate()
Else
INSERT INTO stat values (1,GetDate())
5. триггеры для проверки правильности ввода значения поля
CREATE TRIGGER Upd_OC ON usp
FOR UPDATE AS
declare @oc int, @nom int
if update (ocenka)
begin
select @oc=ocenka, @nom=unum from usp
if (@oc>1) and (@oc<6)
UPDATE usp set ocenka=@oc where unum=@nom
Else
UPDATE usp set ocenks=null where unum=@nom
End
Ограничения на создание триггера:
Нельзя использовать в триггерах операторы создания, удаления и изменения объекта в БД (create, drop, alter)
Нельзя изменять права доступа к БД
Нельзя создавать триггер для представления
Триггеры не принимают и не возвращают никаких значений, поэтому не могут самостоятельно связаться с приложением клиента.
Действия |
Хр.процед. |
триггеры |
Называются |
+ |
- |
Используют локальные переменные |
+ |
+ |
Используют глобальные переменные |
+ |
- |
Используют операторы DML |
+ |
+ |
Используют операторы DDL |
+ |
- |
Расположены на сервере |
+ |
+ |
Используются для ведения статистики |
- |
+ |
Используются для поддержания ссылочной целостности |
+ |
+ |
Вызываются автоматически |
- |
+ |
28. Использование курсоров в SQL.
Курсоры – область памяти БД, в которой сохраняется результат последнего оператора SQL (запрос). Курсор обычно используется для извлечения порций данных из БД, при этом программа получает возможность анализировать текущее состояние строки курсора.
DACLARE <имя> CURSOR FOR <команда>
Команда определяет выполняемый запрос, задет имя и связывает результаты запроса с указанным курсором. Но запрос оператор не выполняет.
OPEN <имя курсора> - открытие курсора, дает команду SQL выполнить запрос, который указан в курсоре, а результат сохраняется в области памяти. Указанная строка становится текущей строкой курсора.
Извлечение данных из курсора:
FETCH [NEXT | PRIOR | FIRST | LAST | ABSOLUTE <n> | RELATIVE <n>] FROM <курсор> [INTO <переменная>]
- извлекает на экран или в указанные переменные. Текущая строка (по умолчанию) – NEXT, PRIOR – следующая строка, FIRST – первая, LAST – последняя, ABSOLUTE <n> - строка с номером n, RELATIVE <n> - n строка относительно текущей.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.