当表Stock中的列StockNum修改时,检查修改前后数据是否一样,如果修改前大于修改后,则减少表Part中的库存量PartKC,反之则增加;同时,当列StockNum或是列StockJE修改时,表Part中的PartJG更新,这样的触发器该怎么做呢?

解决方案 »

  1.   

    create table stock(ID int,stocknum int,stockje int)
    create table part(id int,partkc int,partjg int)
    insert into stock select 1,15,20
    union all select 2,32,44
    insert into part select 1,50,76
    union all select 2,88,79
    go
    --如果只是更新,且part表id唯一:
    create trigger updatepart
    on stock
    for update
    as
    begin
    update part set partkc=partkc+b.stocknum-c.stocknum,partjg=partjg+b.stockje-c.stockje
    from part a inner join inserted b on a.id=b.id inner join deleted c on a.id=c.id
    end
    go
    update stock set stocknum=18 where id=1
    select * from part
    /*
    id          partkc      partjg
    ----------- ----------- -----------
    1           53          76
    2           88          79(2 行受影响)
    */
    update stock set stockje=14 where id=2
    select * from part
    /*
    id          partkc      partjg
    ----------- ----------- -----------
    1           53          76
    2           88          49(2 行受影响)
    */
    go
    drop table stock,part