employee(员工表)
employeeid , name ,deptid(部门编号)  (其他字段省略)GZK(特殊表)
employeeid, deptid(部门编号) (其他字段省略)当employee表中的deptid修改了,GZK的deptid跟着修改
alter trigger trg_dept on employee for update
as
begin
  update gzk  set deptid=b.deptid from employee a,inserted b,deleted c
     where a.employeeid=b.employeeid
end我想在UPDATE前加一个判断:如果是修改了deptid这个字段 ,如何写这个判断?或者有没有更好的方法写这个触发器。谢谢! 

解决方案 »

  1.   

    if update(deptid)
      update gzk  set deptid=b.deptid from employee a,inserted b,deleted c
         where a.employeeid=b.employeeid
      

  2.   

    IF UPDATE(deptid)
    begin
    ...
    end; 
      

  3.   

    if update(deptid)
    触发了好多条记录,因为 GZK(特殊表) 有多条对应
      

  4.   

    触发好多记录是你update的问题,不是if update(deptid)的问题。
      

  5.   

    这个触发器,我简化了,还有个条件
    alter trigger trg_dept on employee for update
    as
    if update(deptid)
    begin
      update gzk  set deptid=b.deptid from employee a,inserted b,deleted c
         where a.employeeid=b.employeeid and bz='0000'
    end修改EMPLOY表其中一条记录,
    update employee set deptid='A001' where employeeid='12345' 
    结果是GZK表中,所有bz='0000'记录的deptid 都等于 A001。
    请问这样如何修改?
      

  6.   


    在GZK表中,条件BZ='0000',每个员工都对应有一条记录。
      

  7.   

    参考:
    http://www.cnblogs.com/insus/articles/1447220.html
      

  8.   

    谢谢!我改成下面这样的
    create trigger trg_dept on employee for update
    as
    DECLARE 
    @EmployeeID varchar(100),
    @Deptid varchar(100)
    SELECT @EmployeeID=EmployeeID,@Deptid=deptid FROM INSERTEDIF UPDATE([deptid])
    begin
     update gzk  set deptid=@Deptid      where gzk.employeeid=@EmployeeID and bz='0000'
    end
    我执行了这个语句
    update employee set deptid='1103' where employeeid = 'A00937' 
     or employeeid = 'A04224' or  employeeid = 'A00954'
    结果是:(所影响的行数为 1 行)
    (所影响的行数为 3 行)EMPLOYEE是修改了3个记录,但是GZK表中只有一条记录修改了