需求更改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)

解决方案 »

  1.   

    go
    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
      

  2.   

    这用写行不行。A表加一个ID字段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)
    update A表 SET 状态=3 where id=2 B表无效
      

  3.   


    这个问题最好用存储过程做。
    你也可以用row_number()over()