用友软件想实现这样功能:核算模块新建或修改入库单,自动将入库单的存货更新成本,入库单明细表Rdrecords,存货单价字段iUnitCost,存货档案表Inventory,成本字段cInvCode,写了两个触发器如下:
Create Trigger Tri_RdrecordUpdate
On Rdrecords
For Update
As
If Update(iUnitCost)
begin
Update Inventory Set iInvNCost = i.iUnitCost
From Rdrecords,Inserted i,Deleted d
Where Inventory.cInvCode = d.cInvCode
EndgoCreate Trigger Tri_RdrecordInsert
On Rdrecords
After Insert
As
Update inventory Set iinvncost = i.iUnitCost
From rdrecords,Inserted i
Where rdrecords.autoid = i.autoid
go可现在问题是,从软件里新建或修改入库单里有两条数据时,会将后一条的单价更新给这两个存货,谁能告诉我这是为什么,怎么解决?

解决方案 »

  1.   

    万能的CSDN的大神们呀!救我呀!
      

  2.   

    问题可能出在用友软件入库单里无论多少条数据只触发一次insert或update
      

  3.   

    没写错表名,两个触发器一个是insert的一个是update的,我不会把两个写在一起
      

  4.   

    Create Trigger Tri_RdrecordUpdate
    On Rdrecords
    For insert,Update
    As
    if  not exists(select 1 from deleted)
    begin
    Update inventory Set iinvncost = i.iUnitCost
    From rdrecords,Inserted i
    Where rdrecords.autoid = i.autoid

    Update Inventory 
    Set iInvNCost = i.iUnitCost
    From Inserted i
    Where Inventory.cInvCode = i.cInvCode
    end
    else If Update(iUnitCost)  
    begin
     
    Update Inventory 
    Set iInvNCost = i.iUnitCost
    From Inserted i
    Where Inventory.cInvCode = i.cInvCode
    Endgo
      

  5.   

    上面那个触发器只是把我两个触发器合成了一个,但根本问题没有解决呀,应该是多条数据只触发一次update的事。
      

  6.   

    大哥,我是做软件维护的,不懂太多数据库呀,我用软件测的,可能是我说的不明白,入库单里面可能有多条存货,拿修改单据来说吧,点击保存时我认为是update了一次,触发了一次触发器,但更新了多条数据,你那个触发器我测了,跟我原来的效果一样,我修改了一张入库单,里面有两条数据,第一条数据的是货品1,单价是10,第二条数据是货品2,单价是8,保存单据后,去基础数据里查成本,货品1和货品2成本都是8,是把单据上第二条数据的单价更新到了两个存货,我触发器肯定写得有问题。
      

  7.   

    是否为新增入库或修改入库都更新成本存货档案表Inventory,成本字段cInvCode
    两表有没有 货品 字段?应该是有才正常