触发器肯定 是在INSERT、UPDATE、DELETE一条记录后触发

解决方案 »

  1.   

    你使用CURSOR(游标)进行处理就可以了,例子:
    create trigger tri_test
    on test
    for insert 
    as 
    declare @id int,@sl float
    declare cur_test cursor
    for select id,sl from inserted
    open cur_test
    fetch next from cur_test
    into @id,@sl
    while @@fetch_status=0
    begin
       update test1 set sl=sl+@sl where zkid=@id
       fetch next from cur_test
       into @id,@sl
    end一个简单的例子,当然使用触发器你应该对INSERTED、DELETED这两个临时表有一定的了解。
      

  2.   

    oracle
    触发器分为表级触发器和行级触发器,如果是行级触发器,那么在事件申明的后面加上
    for each row,表级触发器的含义是不管你这次操作对某表插入了多少条记录,触发器只触发一次
    create or replace trigger test
    after insert or delete on aa for each row(行级触发器)
    begin
    IF INSERTING THEN
    IF :old.bb=0 THEN
    /*do somthing*/
    END IF
    IF :old.bb=1 THEN
    /*do somthing*/
    END IF
    END IFIF DELETING THEN
    IF :old.bb=0 THEN
    /*do somthing*/
    END IF
    IF :old.bb=1 THEN
    /*do somthing*/
    END IF
    END IF
    end;
      

  3.   

    我使用的是ms sqlserver,哪位对sqlserver触发器了解较深,澄清一下它的触发器是基于语句的还是基于记录的?因为我也是刚刚学,并不是很明白。
      

  4.   

    sqlserver的语句是基于语句的。提交语句时,SQLSERVER利用inserted表和deleted表
    记录新记录和修改后的记录。Inserted表和deleted 表结构和触发器对应的表结构一样的。
    如果是Insert语句,只有inserted表有记录,是新插入的数据;如果是delete语句,只有deleted有记录,delete中是被删除的该表的记录。但如果是update语句,inserted表是
    update后的改动的新记录,deleted表是update更新前被改动的老记录。
    例如:有表aa中有字段id
          有表bb有字段id,b1,……
    要求:当aa表增加一条记录时,bb表同时增加一条记录
          当aa表删除一条记录时,bb表同时删除同样的记录
          当 aa表id数据更新是,bb表的id同时更新。
    Create trigger utr_test
    on aa for insert,uodate,delete
    As
    Begin
    /*先删除老记录*/
    delete bb from deleted a,bb b where a.id = b.id
    Insert bb(id) select id from inserted
    End
    go
      

  5.   

    inseted和deleted其实是两个记录集,你只要对这两个记录机判断,进行相应的操作就可以了。