Основы языка TRANSACT SQL. Казакова И.А. - 141 стр.

UptoLike

Составители: 

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