需求更改A表对B表发生状态发生变化
A表
员工编号 开始时间 结束时间 状态
001 2011-12-01 2011-12-01 0
001 2011-12-02 2011-12-03 1
001 2011-12-05 2011-12-06 0
B表
员工编号 日期 状态
001 2011-12-01 0
001 2011-12-02 1
001 2011-12-03 1
001 2011-12-04 NULL
001 2011-12-05 0
001 2011-12-06 0
这样的两张表
如我修改A表的第二条记录。修改为下面这样
001 2011-12-02 2011-12-02 0
B表的第2条记录状态变成0,第3条记录状态变为NULL
如果我删除A表第一条记录
B表的第一条记录变为NULL,如果删除A表的第三条记录,那B表的5,6条记录状态为NULL怎么写触发器或存储过程
-------------------------------------------------------------------------
测试数据
create table A表(员工编号 nvarchar(10),开始时间 datetime,结束时间 datetime,状态 int)
insert into A表 values('001','2011-12-01','2011-12-01',0)
insert into A表 values('001','2011-12-02','2011-12-03',1)
insert into A表 values('001','2011-12-05','2011-12-06',0)
CREATE TABLE B表 (员工编号 nvarchar(10),日期 datetime,状态 int)
insert into B表 values('001','2011-12-01',0)
insert into B表 values('001','2011-12-02',1)
insert into B表 values('001','2011-12-03',1)
insert into B表 values('001','2011-12-04',null)
insert into B表 values('001','2011-12-05',0)
insert into B表 values('001','2011-12-06',0)
create trigger tri_update on A表
for update,delete
as
if(select count(*) from deleted)>0
and (select count(*) from inserted)>0--如果是更新
begin
update B表 set 状态=0 where 日期=(select 开始时间 from deleted)
update B表 set 状态=null where 日期=(select max(开始时间) from A表)
end
else
if not exists(select * from inserted)--如果是删除
begin
update B表 set 状态=null where 日期=( select 开始时间 from deleted )
update B表 set 状态=null where 日期=( select 结束时间 from deleted )
end
insert into A表 values('001','2011-12-01','2011-12-01',0)
insert into A表 values('001','2011-12-02','2011-12-03',1)
insert into A表 values('001','2011-12-05','2011-12-06',0)
update A表 SET 状态=3 where id=2 B表无效
这个问题最好用存储过程做。
你也可以用row_number()over()