一列中的触发器应更新不同表中另一列的值

时间:2014-06-13 07:07:51

标签: sql-server triggers

我是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 个答案:

答案 0 :(得分:0)

假设您只想在EndDateNULL更改为非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或更新为其他值,则触发器可能必须变得更复杂。

有关inserteddeleted的信息,请参阅Use the inserted and deleted Tables

答案 1 :(得分:-1)

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;
/