没仔细看你的触发器.
但是应该无法处理批量(多行)的问题.
批量(多行)在deleted,inserted表中是多个的,你set了某个变量等于什么.只能取到一个值.
如果你能理解我的意思.那么就能知道自己的触发器是对是错了.

解决方案 »

  1.   

    首先谢谢意 rivery(river) 
    我是用PB的,假如在一个数据窗口中我一次改了多行内容,然后用
    if  dw_1.update() = 1 then 
      commit;
    else
      rollback;
    end if这样算不算批量(多行)操作呢?还有我用一个循环将数据窗口中的多行数据
    一条一条删除,最后也是一起 dw_1.update() 后 commit;
    这样算不算批量 操作呢? 麻烦各位指教.
      

  2.   

    建一游标逐条数
    declare del_cur cursor as select dyestuff_id,cw,price,quantity from deleted
    open del_cur
    fetch next from del_cur into @id,@cw,@price,@qty
    while @@fetch_status=0 begin
       --处理程序
      fetch next from del_cur into @id,@cw,@price,@qtyend
      

  3.   

    我是用PB的,假如在一个数据窗口中我一次改了多行内容,然后用
    if  dw_1.update() = 1 then 
      commit;
    else
      rollback;
    end if这样算不算批量(多行)操作呢?
    pb会不会分多行 insert 插入到数据库呢
      

  4.   

    同时多行插入、更新、删除,和单行操作的时候,触发器的编写应该是不一样的。为了提升触发器的效率(或者说是尽可能的少用游标),在触发器中应该判断inserted或者是deleted表中的数据量,如果>=1还是需要用游标操作,否则,直接操作即可。可以减少游标带来的性能影响。PS:在很多的实时业务系统中,批量插入、更新、删除的操作还是比较少的,用上面的方法胜于都用游标进行处理。带来的效率提升是明显的。
      

  5.   

    关键问题的是触发器是行触发还是事务触发,  我看了半天,感觉到SQL SERVER是事务触发
    不是行触发,有的东东做起来的确不象ORACLE那么方便。