CREATE TABLE C(ITEM_CODE NCHAR(20),IN_QTY INT,OUT_QTY INT)
--SELECT * FROM C
GO
----重复以下步骤建立B表的触发器
CREATE TABLE A(ID INT IDENTITY(1,1),ITEM_CODE NCHAR(20),QTY INT,STATE BIT DEFAULT 0)
INSERT A(ITEM_CODE,QTY) SELECT 'ABC',108
INSERT A(ITEM_CODE,QTY) SELECT 'ABC',16
INSERT A(ITEM_CODE,QTY) SELECT 'CCC',29
--SELECT * FROM A
GO
CREATE TRIGGER TU_A ON A FOR UPDATE
AS
BEGIN
DECLARE @SIGN INT
DECLARE @ITEM_CODE NCHAR(20)
DECLARE @QTY INT
DECLARE @STATE_I BIT
DECLARE @STATE_D BIT
IF NOT UPDATE(STATE) RETURN
DECLARE CR_A SCROLL CURSOR FOR
SELECT
I.ITEM_CODE,
I.QTY,
I.STATE,
D.STATE
FROM INSERTED I JOIN DELETED D ON I.ID=D.ID
OPEN CR_A
FETCH NEXT FROM CR_A INTO @ITEM_CODE,@QTY,@STATE_I,@STATE_D
IF @STATE_I=1 AND @STATE_D=0 -- 批准操作
SET @SIGN=1
ELSE IF @STATE_I=0 AND @STATE_D=1 -- 反批操作
SET @SIGN=-1
ELSE
GOTO _BREAK
WHILE (@@FETCH_STATUS=0)
BEGIN
IF NOT EXISTS(SELECT 1 FROM C WHERE ITEM_CODE=@ITEM_CODE)
BEGIN
INSERT C(ITEM_CODE,IN_QTY,OUT_QTY) VALUES(@ITEM_CODE,0,0)
END
UPDATE C SET IN_QTY=ISNULL(IN_QTY,0)+ISNULL(@QTY,0)*@SIGN WHERE ITEM_CODE=@ITEM_CODE
FETCH NEXT FROM CR_A INTO @ITEM_CODE,@QTY,@STATE_I,@STATE_D
END
_BREAK:
CLOSE CR_A
DEALLOCATE CR_A
END
GO
----重复以上步骤建立B表的触发器
CREATE TRIGGER updateStock
ON b for UPDATE
AS
BEGIN
if update(ProductCount)
update c set c.StockCount = a.ProductCount from c,inserted a where b.id = a.id
END