定义一个instead of触发器,工资变动时绝对值不能超过2000,超过2000的不变动工资,不超过2000的则修改工资
修改前的数据库:编号   姓名     性别  年龄        所属部门     工资          
---- ------------------------------------------------
1    陈有朋     男    28          项目部       3000
3    刘燕       女    29          项目部       3500
2    孙晓群     女    30          项目部       1000执行
update 员工数据表
set 工资=5000
where 所属部门='项目部'修改后的数据库:编号   姓名     性别  年龄        所属部门     工资          
---- ------------------------------------------------
1    陈有朋     男    28          项目部       5000
3    刘燕       女    29          项目部       5000
2    孙晓群     女    30          项目部       1000执行结果:修改了2条记录有1条记录未被修改
以下是我个人做的,可是不对。if exists(select name from sysobjects where name='RM')
drop trigger RM
go
create trigger RM
on 员工数据表
instead of update
asif(select abs(inserted.工资-deleted.工资) from inserted,deleted
where inserted.编号=deleted.编号)<=2000
begin
update 员工数据表
set 员工数据表.工资=inserted.工资
from 员工数据表,inserted
where 员工数据表.编号=inserted.编号print '修改了'+cast(@@rowcount as varchar)+'条记录'
endif(select abs(inserted.工资-deleted.工资) from inserted,deleted
where inserted.编号=deleted.编号)>2000
print '有'+cast(@@rowcount as varchar)+'条记录未被修改'goupdate 员工数据表
set 工资=5000
where 所属部门='项目部'

解决方案 »

  1.   


    楼主的触发器之对UPDATE有效果。
    但是你怎么在后面使用了inserted,deleted
      

  2.   

    题目:定义一个instead of触发器,工资变动时绝对值不能超过2000,超过2000的不变动工资,不超过2000的则修改工资
    修改前的数据库:编号   姓名     性别  年龄        所属部门     工资          
    ---- ------------------------------------------------
    1    陈有朋     男    28          项目部       3000
    3    刘燕       女    29          项目部       3500
    2    孙晓群     女    30          项目部       1000执行
    update 员工数据表
    set 工资=5000
    where 所属部门='项目部'修改后的数据库:编号   姓名     性别  年龄        所属部门     工资          
    ---- ------------------------------------------------
    1    陈有朋     男    28          项目部       5000
    3    刘燕       女    29          项目部       5000
    2    孙晓群     女    30          项目部       1000执行结果有以下就可以了:修改了2条记录有1条记录未被修改
    怎么做呢?
    我上面做的是不对的,请不要责怪小弟乱做的。
      

  3.   

    楼主可以参考一下这个:
    http://blog.csdn.net/sdhdy/archive/2009/06/07/4249668.aspx
      

  4.   


    --簡單寫個例子
    create table T(id int,qty int)
    insert into T select 1,30
    insert into T select 2,35
    insert into T select 3,10
    insert into T select 4,10
    insert into T select 5,30
    GO
    Create trigger tri_t on T
    instead of update
    as
    begin
     if update(qty)
        update a
        set qty=case when abs(b.qty-c.qty)>20
    then a.qty 
    else b.qty
    end
        from T a, inserted b,deleted c
    where a.id=b.id
    and a.id=c.id
        
       
    end
    GO
    update T
    set qty=50
    where id in(1,2,3)
    GO
    select * from T
    /*
    id          qty
    ----------- -----------
    1           50
    2           50
    3           10   --絕對值超過20
    4           10   --不是更新項目
    5           30   --不是更新項目
    */
      

  5.   

    if exists(select name from sysobjects where name='RM')
    drop trigger RM
    go
    create trigger RM
    on 员工数据表
    instead of update
    as--绝对值<2000,工资<2000 才變更
    if(select abs(inserted.工资-deleted.工资) from inserted,deleted
        where inserted.编号=deleted.编号 and delete.工资<2000)<=2000
    begin
    update 员工数据表
    set 员工数据表.工资=inserted.工资
    from 员工数据表,inserted
    where 员工数据表.编号=inserted.编号print '修改了'+cast(@@rowcount as varchar)+'条记录'
    end--其它不變更
    if(select abs(inserted.工资-deleted.工资) from inserted,deleted
        where inserted.编号=deleted.编号)>2000
    print '有'+cast(@@rowcount as varchar)+'条记录未被修改'goupdate 员工数据表
    set 工资=5000
    where 所属部门='项目部'