Триггер в одном столбце должен обновить значение другого столбца в разных таблицах

Я новичок в sql. Я использую sql server management studio 2008 R2 и мне нужна помощь. У меня две таблицы

tblProject
 ProjectID   BeginDate       EndDate
     1.      2013-03-20      2013-03-30
     2.      2013-04-10      ........
     3.      2014-03-10      .....   
tblProjectMembers
     MemberID    ProjectID    MemberSince    MemberUntil
     1.          1            2013-03-20     2013-03-30
     2.           ....        ..........     ..........

Я хочу создать триггер для столбца EndDate, поэтому при вставке tblProject.EndDate триггер должен обновить столбец MemberUntil и прервать членство для существующих членов. (Примечание: некоторые участники могут покинуть проект раньше, до даты окончания, но некоторые из них находятся там до конца проекта).

Спасибо,

2 ответа

Предполагая, что вы хотите действовать только в первый раз EndDate изменен с того, чтобы быть NULL не-NULL, триггер будет что-то вроде:

CREATE TRIGGER T_tblProject_U
AFTER UPDATE
AS
    UPDATE
        pm
    SET
        MemberUntil = i.EndDate
    FROM
        inserted i
             inner join
        deleted d
             on
                 i.ProjectID = d.ProjectID and
                 i.EndDate is not null and
                 d.EndDate is null
             inner join
        tblProjectMember pm
             on
                 i.ProjectID = pm.ProjectID
    WHERE
        pm.MemberUntil is null

Если у вас есть дополнительная логика, которую вы хотите применить, например, если EndDate установлен в NULL снова или обновляется до другого значения, триггер может стать более сложным.

Для получения информации о inserted а также deletedсм. раздел Использование вставленных и удаленных таблиц.

create or replace trigger xyz
after insert of EndDate on tblProject for each row
begin
    update tblProjectMembers set
    MemberUntil = (select :new.EndDate from tblProject where tblProjectMembers.ProjectID = tblProject.ProjectID);

    exception when others then
null;

end;
/
Другие вопросы по тегам