这样的update触发器怎么写?

lovecPlusPlus 2005-09-01 10:07:22
有一张表 tb_storage_in :其中两个字段[GOODS_ID] varchar(20),[GOODS_AMOUNT] varchar(20)分别是商品的id和数量,这张表用来记录商品入库的情况
还有一张库存表 tb_storage 也是两个字段[GOODS_ID],[GOODS_AMOUNT]

现在想为tb_storage_in做一个update触发器,完成的功能是:如果一开始tb_storage_in中插入一条记录,表示某商品入库了100个单位,同时,tb_storage中的总的数量也应该是100个单位,现在发现入库错了,不是100,而是80,如何用触发器来修改tb_storage中的数据?
...全文
170 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
danisluo 2005-09-01
  • 打赏
  • 举报
回复
bugchen888(臭虫) 和libin_ftsafe(子陌红尘) 结果应该是一样的
lovecPlusPlus 2005-09-01
  • 打赏
  • 举报
回复
好了,功能完成了,多谢各位。
danisluo 2005-09-01
  • 打赏
  • 举报
回复
up libin_ftsafe(子陌红尘)
如果楼主想实现其描述内容的话,必须要用到inserted与deleted两张表,建议楼主看一下触发器中关于inserted与deleted表的用法.
bugchen888 2005-09-01
  • 打赏
  • 举报
回复
关键是这句话:set [GOODS_AMOUNT]=[GOODS_AMOUNT]+i.[GOODS_AMOUNT]-d.[GOODS_AMOUNT]
举个例子说明:
假设[GOODS_ID]为GD01的商品库存总量为2000。
现在要把它的一笔入库记录更新一下,把原来的100更新为80。
则数据库实际上是做了两个操作,先删除原来的那笔100的纪录,再插入一笔新的80的记录。
而该商品的真实库存则应更新为2000+80-100=1920。

以上那句SQL就是完成的这个一加一减的操作。
zhangyang555 2005-09-01
  • 打赏
  • 举报
回复
呵呵,是继续,不是就绪
bugchen888 2005-09-01
  • 打赏
  • 举报
回复
关键是这句话:set [GOODS_AMOUNT]=[GOODS_AMOUNT]+i.[GOODS_AMOUNT]-d.[GOODS_AMOUNT]
举个例子说明:
假设[GOODS_ID]为GD01的商品库存总量为2000。
现在要把它的一笔入库记录更新一下,把原来的100更新为80。
则数据库实际上是做了两个操作,先删除原来的那笔100的纪录,再插入一笔新的80的记录。
而该商品的真实库存则应更新为2000+80-100=1920。

以上那句SQL就是完成的这个一加一减的操作。
子陌红尘 2005-09-01
  • 打赏
  • 举报
回复
更新一条记录,相当于删除原记录,并插入一条新记录,被删除原记录在deleted中,新记录在inserted中。

更新库存表,无外乎将旧的入库数据从库存中删除,并加上新的入库数据。

楼上的触发器就是如是实现的。
zhangyang555 2005-09-01
  • 打赏
  • 举报
回复
数据同步用触发器控制就行了.
可以使用INSTEAD OF 在触发之前判断另一个表的数据,不一样在做修改在就绪触发器的执行.
zhangyang555 2005-09-01
  • 打赏
  • 举报
回复
如果只是这一条错了,直接修改不行吗,为什么要写个UPDATE触发器,难道以后每次都要先写错再修改吗?

没搞懂楼主要干什么..
bugchen888 2005-09-01
  • 打赏
  • 举报
回复
create trigger trg_tb_storage_in_upd on tb_storage_in
for update
as
begin
update tb_storage
set [GOODS_AMOUNT]=[GOODS_AMOUNT]+i.[GOODS_AMOUNT]-d.[GOODS_AMOUNT]
from deleted d,inserted i
where tb_storage.[GOODS_ID]=d.[GOODS_ID]
and tb_storage.[GOODS_ID]=i.[GOODS_ID]
end
bugchen888 2005-09-01
  • 打赏
  • 举报
回复
create trigger trg_tb_storage_in_upd
for update
as
begin
update tb_storage
set [GOODS_AMOUNT]=[GOODS_AMOUNT]+i.[GOODS_AMOUNT]-d.[GOODS_AMOUNT]
from deleted d,inserted i
where tb_storage.[GOODS_ID]=d.[GOODS_ID]
and tb_storage.[GOODS_ID]=i.[GOODS_ID]
end
lovecPlusPlus 2005-09-01
  • 打赏
  • 举报
回复
to:libin_ftsafe
我是菜鸟,能否给我解释一下你的代码?

还有可以添加事务吗?我需要两张表的数据同步
wgsasd311 2005-09-01
  • 打赏
  • 举报
回复
现在想为tb_storage_in做一个update触发器,完成的功能是:如果一开始tb_storage_in中插入一条记录,表示某商品入库了100个单位,同时,tb_storage中的总的数量也应该是100个单位,现在发现入库错了,不是100,而是80,如何用触发器来修改tb_storage中的数据?
-----------楼主你说错了,update触发器不是插入是更新,如你要插入时触发应用insert触发器,
还有现在入库以经错了,怎么能用触发器来更正了。第3数量字段[GOODS_AMOUNT]varchar(20)怎么能用varchar(20)类型呢?
vivianfdlpw 2005-09-01
  • 打赏
  • 举报
回复
你可以添加一个入库-20的新记录或者直接修改tb_storage
ztfuqing 2005-09-01
  • 打赏
  • 举报
回复
同步?
子陌红尘 2005-09-01
  • 打赏
  • 举报
回复
create trigger update_storage
on tb_storage_in
for update
as
begin
update
tb_storage
set
GOODS_AMOUNT = a.GOODS_AMOUNT-b.GOODS_AMOUNT
from
tb_storage a,
deleted b
where
a.GOODS_ID = b.GOODS_ID


update
tb_storage
set
GOODS_AMOUNT = a.GOODS_AMOUNT+b.GOODS_AMOUNT
from
tb_storage a,
inserted b
where
a.GOODS_ID = b.GOODS_ID
end

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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