求一条Update触发器

sione88 2007-06-13 07:40:34
现在有三张表 A B C 分别表示进货单 出货单 库存表,现在出货时库存减少,但是出货后(这时库存已经减少了)我想对出货单的数量进行修改时,调用UPDATE触发器怎么相应的增加和减少库存呢,请各位高手指点一下.
...全文
252 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
九斤半 2007-06-13
  • 打赏
  • 举报
回复
兄弟你先看看,其实不复杂的,思路就是这样的

有什么问题给我发信息~~~
九斤半 2007-06-13
  • 打赏
  • 举报
回复
上面的是加“批准/反批准”的处理方法,若没有此流程,道理也是想通的,

定义两个变量DECLARE @QTY_I AS INT,@QTY_D AS INT

用游标将更新后(INSERTED)和更新前(DELETED)的数量符值给@QTY_I和@QTY_D

更改UPDATE语句即可
UPDATE C SET IN_QTY=ISNULL(IN_QTY,0)+ISNULL(@QTY_I,0)-ISNULL(@QTY_D,0)
WHERE ITEM_CODE=@ITEM_CODE
sione88 2007-06-13
  • 打赏
  • 举报
回复
楼上的好像有点复杂,补充一下,三张表是用货号ID来认别,只要改变数量就可以了,还有这个操作只要对出货和库存两张表进行操作.
九斤半 2007-06-13
  • 打赏
  • 举报
回复
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表的触发器

-- TEST
UPDATE A SET STATE = 1
SELECT * FROM C

UPDATE A SET STATE = 0
SELECT * FROM C

DROP TRIGGER TU_A

DROP TABLE A
DROP TABLE C
稍微有点无敌 2007-06-13
  • 打赏
  • 举报
回复
其实很简单,我假设你表中更新出库量的字段是ProductCount,假设c表中表示库存量的字段是StockCount,其实主要从触发器表inserted 得到更新的记录就可以了

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
九斤半 2007-06-13
  • 打赏
  • 举报
回复
~~~
sione88 2007-06-13
  • 打赏
  • 举报
回复
csdn的高手呢,出來指點麻!!!

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧