请教大虾:
表A:
仓库ID  物资ID  物资数量
  1       1        2
  1       2        2
我向其中插入数据时,如果插入的物资在同一个仓库中存在,如(1,2,2),则将原有的物资数量相加;如果插入的物资不在表A中如(2,1,2),则将新纪录添加进去。
请问如何用触发器实现?
解决即结贴给分 谢谢~

解决方案 »

  1.   

    不是触发器的问题先查询,select @count = count(1) from a where ....
    再判断count
    没有的话就用insert
    有的话就update
      

  2.   


    create trigger tri_A
    on A
    for INSTEAD OF INSERT
    as
    begin
    if exists(select * from inserted i,A a where i.仓库ID=a.仓库ID and i.物资ID=a.物资ID)
    update A set 物资数量=i.物资数量  from inserted i,A a where i.仓库ID=a.仓库ID and i.物资ID=a.物资ID
    else  
    insert A select * from inserted
    end
      

  3.   

    不用TRIGGER ,  写只SP判断一下比较保险
      

  4.   

    恩纳,不过我用的是datatable数据源,
    一次更新多行数据。如果在程序里判断,则要逐行检查
    所以用的触发器。
    现在解决,谢谢各位!
    给分
      

  5.   


    --测试数据
    Create table tb1(仓库ID int,物资ID int,物资数量 int)
    insert into tb1 select 1,1,2
    go
    --创建触发器
    Create TRIGGER Tr_Test
    ON tb1
    instead of  INSERT
    AS 
    BEGIN
      if exists(select 1 from tb1 A inner join inserted B on A.仓库ID=B.仓库ID and A.物资ID=B.物资ID)
         begin
           update A
           set A.物资数量=A.物资数量+B.物资数量
           from tb1 A ,inserted B
           where A.仓库ID=B.仓库ID and A.物资ID=B.物资ID
         end
       else
         begin  
          insert into tb1 select B.* from tb1 A inner join inserted B on A.仓库ID=B.仓库ID and A.物资ID<>B.物资ID
         end
    end
    go
    --输入数据insert into tb1 select 1,1,2
    insert into tb1 select 1,1,2
    insert into tb1 select 1,2,2
    go
    --查看结果select * from tb1
    go
    --删除环境drop trigger Tr_Test
    drop table tb1