create trigger tr1 on lt
for insert ,deleteas
if 
update kc set sl=sl+(case (select rc from inserted) when 0 then (0-  (select sl from inserted)) else (select sl from inserted) end)  where cpbh in (select cpbh from inserted)
update kc set sl=sl
测试如下:
go
insert into kc select '001','1',100
insert into lt select '001','1',0,10
select * from kc
我给你编写一个,自己在完善吧!

解决方案 »

  1.   

    create trigger tr1 on lt
    for insert ,delete,updateas
    if 
    update kc set sl=sl+(case (select rc from inserted) when 0 then (0-  (select sl from inserted)) else (select sl from inserted) end)  where cpbh in (select cpbh from inserted)update kc set sl=sl-(case (select rc from deleted) when 0 then (0-  (select sl from deleted)) else (select sl from deleted) end)  where cpbh in (select cpbh from deleted)
      

  2.   

    我写了一个,不是最好:
    CREATE TRIGGER UP_IN_DE_storelog ON [dbo].[StoreLog] 
    FOR INSERT, UPDATE, DELETE AS
    @IN_OUT bit
    if (Select 入出 form 日志记录表)='1'--当为入库时
    --如果是修改和删除,则deleted表中有数据
    UPDATE 仓库表 SET 数量=a.数量+b.数量 FROM 仓库表 a,deleted b
                   --WHERE a.仓库=b.仓库 AND a.产品编号=b.产品编号 --如果是新增和修改,则inserted表中有数据
    UPDATE 仓库表 SET 数量=a.数量-b.数量 FROM 仓库表 a,inserted b
               WHERE a.仓库=b.仓库  AND a.产品编号=b.产品编号 
    else --当为出库时
    UPDATE 仓库表 SET 数量=a.数量-b.数量 FROM 仓库表 a,deleted b
                   --WHERE a.仓库=b.仓库 AND a.产品编号=b.产品编号--如果是新增和修改,则inserted表中有数据
    UPDATE 仓库表 SET 数量=a.数量+b.数量 FROM 仓库表 a,inserted b
               WHERE a.仓库=b.仓库  AND a.产品编号=b.产品编号
      

  3.   


    --创设入出为0时代表入,为1时代表出
    create trigger t_process on 日志记录表
    for insert,update,delete
    as
    --更新仓库表中已经有产品的数量
    update 仓库表 set 数量=isnull(a.数量,0)+isnull(b.数量,0)
    from 仓库表 a join(
    select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
    from inserted group by 产品编号,仓库
    ) b on a.产品编号=b.产品编号 and a.仓库=b.仓库--插入仓库表中不存在的产品数量
    insert into 仓库表(产品编号,仓库,数量)
    select a.* from (
    select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
    from inserted group by 产品编号,仓库
    ) a left join 仓库表 b on a.产品编号=b.产品编号 and a.仓库=b.仓库
    where b.产品编号 is null and b.仓库 is null--减少删除的产品数量
    update 仓库表 set 数量=isnull(a.数量,0)-isnull(b.数量,0)
    from 仓库表 a join(
    select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
    from deleted group by 产品编号,仓库
    ) b on a.产品编号=b.产品编号 and a.仓库=b.仓库
    go
      

  4.   

    --解决上面的问题.出仓不够--创设入出为0时代表入,为1时代表出
    create trigger t_process on 日志记录表
    for insert,update,delete
    as
    --判断是否有足够的库存
    if exists(select 1 from 仓库表 a join(
    select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
    from inserted group by 产品编号,仓库
    ) b on a.产品编号=b.产品编号 and a.仓库=b.仓库
    where isnull(a.数量,0)+isnull(b.数量,0)<0) 
    begin
    raiserror('库存不足,操作无法进行',1,16)
             rollback tran
    end
    else
    begin
    --更新仓库表中已经有产品的数量
    update 仓库表 set 数量=isnull(a.数量,0)+isnull(b.数量,0)
    from 仓库表 a join(
    select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
    from inserted group by 产品编号,仓库
    ) b on a.产品编号=b.产品编号 and a.仓库=b.仓库--插入仓库表中不存在的产品数量
    insert into 仓库表(产品编号,仓库,数量)
    select a.* from (
    select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
    from inserted group by 产品编号,仓库
    ) a left join 仓库表 b on a.产品编号=b.产品编号 and a.仓库=b.仓库
    where b.产品编号 is null and b.仓库 is null
    end--减少删除的产品数量
    update 仓库表 set 数量=isnull(a.数量,0)-isnull(b.数量,0)
    from 仓库表 a join(
    select 产品编号,仓库,数量=sum(case 入出 when 0 then 数量 else -数量 end)
    from deleted group by 产品编号,仓库
    ) b on a.产品编号=b.产品编号 and a.仓库=b.仓库
    go