Sql server 一列中的触发器应更新不同选项卡中另一列的值
我是sql的初学者。我使用sql server management studio 2008 R2,需要帮助。 我有两张桌子 TBL项目 TBL项目成员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. .... .......... .......... 我想在
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;
/