ВУЗ:
Составители:
Рубрика:
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
- …
- следующая ›
- последняя »