数据库:sqlserver2000  
有三个表:    
主表是ORBaseAdjustOrder(字段:OAOID,OBOID),从表是ORBaseAdjustOrderItem    
(字段:OOIID,OAOID,BPCID,OOIOrderQty),    
主表和从表之间的关联是用OAOID。    
另一个表是:ORBaseOrderItem(字段:OBOID,BPCID),ORBaseOrderItem表的OBOID与    
ORBaseAdjustOrder表OBOID关联的,ORBaseOrderItem表的BPCID与ORBaseAdjustOrderItem    
表的BPCID关联的。    
我在主表ORBaseAdjustOrder里写触发器:    
CREATE  TRIGGER  Tg_insertAdjustOrderData  ON  ORBaseAdjustOrder    
FOR  INSERT,update    
AS    
update  ORBaseOrderItem  set  OOIAdjustOrderQty=OOIAdjustOrderQty+B.OOIOrderQty      
from  ORBaseOrderItem  A,ORBaseAdjustOrderItem  B,inserted  D    
where  A.OBOID=D.OBOID  and  B.OAOID=D.OAOID  and    A.BPCID=B.BPCID    
 
我是在delphi6编程,在主表添加一些数据,然后在从表添加2行以上的数据时,一按保存    
就出错,说不能定位。    
如果在从表只添加1行数据时,一按保存就成功了。    
我觉得这个触发语句是不是只能更新一行数据,不能更新多行数据,后来看了帮助,帮助给出只能更新一行数据的触发器例子很象是我写的触发器的语句。    
请问如何修改这段触发器可以更新多行数据。    

解决方案 »

  1.   

    是的,如果去掉触发器,在主表添加记录,然后在从表添加2条以上的记录,用触发器上的sql语句来运行是没有任何问题的。但上面的触发器,如果是添加子表是一行数据的,触发器就没有问题,很正常,能更新另一表的值;如果添加子表是2行以上的数据,则触发器就有问题了,说无法定位,这是为何呢?
      

  2.   

    表的数据如下:
    ORBaseOrderItem表
    OOIID   OBOID   BPCID     OOIQTY    OOIAdjustOrderQty
    IBM3081 IBM3080 CRN360    40
    IBM3082 IBM3080 IBM1700    520
    IBM3083 IBM3080 IBM1693    126 ORBaseAdjustOrder表
    OAOID     OBOID
    HRQ3554   IBM3080ORBaseAdjustOrderItem表
    OOIID     OAOID   BPCID    OOIOrderQty   
    HRQ3555 HRQ3554   CRN360 40
    HRQ3556 HRQ3554   IBM1693 126
    HRQ3557 HRQ3554   IBM1700 520