Как обрабатывать ОБНОВЛЕНИЕ в ТРИГГЕР - PullRequest
0 голосов
/ 21 июня 2019

Мне нужно создать триггер для обновления всего группы, когда я удаляю, редактирую или добавляю элемент из пользователя.

create table Group(Grp varchar(3) primary key, Name varchar(20), total int);
create table User(Num varchar(3) primary key, Name varchar(30), Sex char(1), Grp varchar(3) references group);

, например:

Table group
+-----+----------+-------+
| Grp | name     | total |
+-----+----------+-------+
| a   | admin    | 2     |
+-----+----------+-------+
| b   | customer | 0     |
+-----+----------+-------+

и таблица User

+-----+-------+-----+-----+
| num | name  | sex | Grp |
+-----+-------+-----+-----+
| 1   | kevin | m   | a   |
+-----+-------+-----+-----+
| 2   | kim   | f   | a   |
+-----+-------+-----+-----+

, поэтому, если я добавляю нового пользователя, общее значение группы должно увеличиваться,
, если я удаляю его, уменьшается, но
, если я меняю группупользователя, как использовать триггер to decrease итог его old group
и increase итог его новой группы

что я пробовал:

CREATE TRIGGER edit_total ON dbo.User
FOR INSERT , UPDATE , DELETE
AS
BEGIN
    IF NOT EXISTS(SELECT * FROM INSERTED)
        -- DELETE
        UPDATE dbo.group SET  total = total - 1 FROM inserted WHERE group.grp = inserted.grpe;
    ELSE
    BEGIN
        IF NOT EXISTS(SELECT * FROM DELETED)
            -- INSERT
            UPDATE dbo.group SET  total = total + 1 FROM inserted WHERE group.grp = inserted.grp;
        ELSE
            -- UPDATE


    END

END;

1 Ответ

0 голосов
/ 21 июня 2019

Я отвечу на ваш конкретный вопрос в том виде, в котором он был задан, поскольку для вас это, по-видимому, академическое упражнение.

Если я изменю группу пользователя, как использовать триггер, чтобы уменьшить общее количествоего старой группы и увеличить общее количество для его новой группы

Когда вы меняете группу пользователя, вы делаете ОБНОВЛЕНИЕ таблицы.Однострочный UPDATE в триггере приводит к появлению строки как в таблице inserted, так и в таблице deleted.

Таким образом, проверяя IF NOT EXISTS, вы предотвращаете подсчет DELETES, еслитакже является INSERT, и наоборот.

Если вы избавляетесь от проверок IF NOT EXISTS и просто увеличиваете для каждой вставки и уменьшаете для каждой операции удаления, вы будете обрабатывать UPDATES так, как хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...