Sql server 一列中的触发器应更新不同选项卡中另一列的值

Sql server 一列中的触发器应更新不同选项卡中另一列的值,sql-server,triggers,Sql Server,Triggers,我是sql的初学者。我使用sql server management studio 2008 R2,需要帮助。 我有两张桌子 TBL项目 TBL项目成员 MemberID ProjectID MemberSince MemberUntil 1. 1 2013-03-20 2013-03-30 2. .... .......... .......... 我想在

我是sql的初学者。我使用sql server management studio 2008 R2,需要帮助。 我有两张桌子

TBL项目 TBL项目成员
     MemberID    ProjectID    MemberSince    MemberUntil
     1.          1            2013-03-20     2013-03-30
     2.           ....        ..........     ..........
我想在EndDate列上创建一个触发器,因此在插入tblProject.EndDate时,触发器应该更新列MemberUntil并中断现有成员的成员资格。注意:有些成员可以在项目结束日期之前提前离开项目。但有些成员会在项目结束之前离开


谢谢,

假设您只想在第一次将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或更新为其他值,则触发器可能会变得更复杂

有关插入和删除的信息,请参见

问题已标记。SQL Server触发器在每条语句中运行一次,没有for each row选项。它也不能针对单个列。
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
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;
/