优雅的代码

此代码为一个触发器,应用环境如下:

/*库存数量表*/
create table tb_GoodsInv (
   InvID                int                  identity,
   GoodsID              int                  not null,
   DeptID               smallint             not null,
   Qty                  int                  not null,
   constraint PK_TB_GOODSINV primary key (InvID)
)
go

/*订单明细表*/
create table tb_ROLine (
   ROLineID             int                  identity,
   ROID                 int                  not null,
   GoodsID              int                  not null,
   OrigQty              int                  not null,
   RealQty              int                  not null,
   constraint PK_TB_ROLINE primary key (ROLineID)
)
go

要求订单明细表每增加一条记录,即同步向库存数量中相同的商品累加数量,若无记录则创建记录。
以下是这个让我看了三遍才明白的代码:

CREATE TRIGGER tri_ro
ON tb_ROLine
FOR insert
AS
   update tb_GoodsInv set qty=tb_GoodsInv.Qty+t.realQty
   from (
    select goodsid ,sum(realQty) as realqty
    from inserted
    group by goodsid
   ) as t
   where tb_GoodsInv.goodsid=t.goodsid

   insert tb_GoodsInv(goodsid,Qty)
    select goodsid ,sum(realQty) as realqty
    from inserted i
    where not exists (
       select 1
       from tb_GoodsInv
       where goodsid=i.goodsid
       )
    group by goodsid
go

Leave a Reply

Your email address will not be published. Required fields are marked *