Yuzifu Studio

优雅的代码

栏目:Note      226 views      尚无回复

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

/*库存数量表*/
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

标签: ,

转载注明:转自Yuzifu Studio

本站遵循:署名-非商业性使用-禁止演绎 3.0 共享协议

收藏分享: QQ书签 / 百度收藏 / Google书签 / 收藏到鲜果 / Digg / Del.icio.us



发表回复


XHTML: 您可以使用如下代码:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">