现在想写一个触发器,大致要实现的就是在一张工资表里如果某个人的工资变动的话(时间和金额),那么要把这个人的变动前和变动后的记录重新插入到一张新表(alteror)
工资表名wage  里有编号(ID) 工资变动时间(CHNG_DATE)和工资变动金额(CHNG_WAGE)
请问如何编写。另外,这个语句是不是写在SQL SERVER 里的存储过程里?

解决方案 »

  1.   

    create trigger triggername on wage
    for update
    as
    if update(CHNG_WAGE)
    begin
    insert into alteror select * from deleted --注意这种写法需要历史表和操作表的结构是完全一样的
    end
      

  2.   

    楼上说的对,但是补充说明一点,不是不触发,是触发了但是因为异常,而使得操作不继续无法插入,产生了回滚。如果你的应用是在大型系统上的,那么还是建议你用stored procedure,但是小型系统就无所谓了。如果要用stored procedure,又要实现自动化,就需要用到service agant,然后建立一个job,之后设定一个操作的间隔时间就可
      

  3.   

    用触发器也是一种好的习惯,不错,不过在Sql2000中触发器只有update事件就是说在你更改后才触发的那么在这个触发器里面只能记录到你更改后的记录而记录不了你更改前的记录。
    所以,你最好在更改前把记录给记录下来了!
    而记录更改后的记录的触发器写法如下 :
    create trigger triggername on wage
    for update
    as
    if update(CHNG_WAGE)
    begin
    insert into alteror select * from deleted --注意这种写法需要历史表和操作表的结构是完全一样的
    end
      

  4.   

    而在Oracel9i里就有更新前和更新后两个事件了!