2014-06-13 108 views
0

我是sql的初学者。我使用SQL Server管理工作室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.   ....  ..........  .......... 

我想创建于结束日期列触发,所以插入tblProject.EndDate时,触发器应更新列MemberUntil,打破隶属现有成员。 (注意:有些成员可以在结束日期之前提前离开项目,但其中一些成员可以在结束日期之前离开项目)。

感谢,

回答

0

假设你只需要作用于第一时间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或更新为不同的值时,触发器可能必须变得更加复杂。

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

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

问题是标签的[标签:SQL服务器。 SQL Server触发器对每个语句运行一次,没有'for each row'选项。它也不能针对单个列。 –

相关问题