ВУЗ:
Составители:
Рубрика:
140
17.6. Использование хранимых процедур
в триггерах
Хранимые процедуры могут быть активизированы не только
пользовательскими приложениями, но и триггерами.
Пример 108. Создадим процедуру, обновляющую количество
студентов в группе:
CREATE PROCEDURE UpdateKolStud
@group INT
AS
DECLARE @newKolStud SMALLINT
BEGIN
SELECT @newKolStud = COUNT(*) FROM Students WHERE
ID_Group = @group
UPDATE Groups SET Kol_Stud = @newKolStud WHERE
ID_Group = @group
END;
Теперь создадим триггер, который будет срабатывать при уда-
лении студента из базы данных или добавлении студента в базу
данных:
CREATE TRIGGER KolStudTrigger
ON Students
AFTER INSERT, DELETE
AS
DECLARE @gr1 INT, @gr2 INT
if @@rowcount = 1
BEGIN
SELECT @Gr1 = ID_Group FROM deleted
SELECT @Gr2 = ID_Group FROM inserted
IF (SELECT DISTINCT ID_Group FROM deleted) IS
NOT NULL
EXEC UpdateKolStud @group = @gr1;
IF (SELECT DISTINCT ID_Group FROM inserted) IS
NOT NULL
EXEC UpdateKolStud @group = @gr2;
END;
17.6. Использование хранимых процедур
в триггерах
Хранимые процедуры могут быть активизированы не только
пользовательскими приложениями, но и триггерами.
Пример 108. Создадим процедуру, обновляющую количество
студентов в группе:
CREATE PROCEDURE UpdateKolStud
@group INT
AS
DECLARE @newKolStud SMALLINT
BEGIN
SELECT @newKolStud = COUNT(*) FROM Students WHERE
ID_Group = @group
UPDATE Groups SET Kol_Stud = @newKolStud WHERE
ID_Group = @group
END;
Теперь создадим триггер, который будет срабатывать при уда-
лении студента из базы данных или добавлении студента в базу
данных:
CREATE TRIGGER KolStudTrigger
ON Students
AFTER INSERT, DELETE
AS
DECLARE @gr1 INT, @gr2 INT
if @@rowcount = 1
BEGIN
SELECT @Gr1 = ID_Group FROM deleted
SELECT @Gr2 = ID_Group FROM inserted
IF (SELECT DISTINCT ID_Group FROM deleted) IS
NOT NULL
EXEC UpdateKolStud @group = @gr1;
IF (SELECT DISTINCT ID_Group FROM inserted) IS
NOT NULL
EXEC UpdateKolStud @group = @gr2;
END;
140
Страницы
- « первая
- ‹ предыдущая
- …
- 139
- 140
- 141
- 142
- 143
- …
- следующая ›
- последняя »
