【求助】如何编写sql触发器 在新增出库表后更新库存表数据

虚心学习的饭仔 2018-05-09 07:23:47
【求助】如何编写sql触发器 在新增出库表后更新库存表数据
------------------------------------------------------------
出库表

ID 品名 产品ID 出库数量


库存表

产品ID 品名 库存量

------------------------------------------------------
以上是表结构
实际应用的时候会有每张出库表有多个产品的同时出库的情况
如何写触发器,做到同步更新出库表对应的库存表中的产品库存数量。
...全文
1639 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shinger126 2018-05-11
  • 打赏
  • 举报
回复
CREATE TRIGGER tr_出库表 ON 出库表 FOR INSERT,UPDATE --要考虑修改的时候,也能更新 AS --先从deleted表加上库存 UPDATE b SET b.库存数 = b.库存数 + a.数量 FROM 库存表 b,(SELECT 产品ID,SUM(出库数量) 数量 FROM deleted GROUP BY 产品ID) a WHERE b.产品ID=a.产品ID UPDATE b SET b.库存数 = b.库存数 - a.数量 FROM 库存表 b,(SELECT 产品ID,SUM(出库数量) 数量 FROM inserted GROUP BY 产品ID) a WHERE b.产品ID=a.产品ID --如果允许没有库存记录出库的话,要考虑这种情况 INSERT INTO 库存表(产品ID,库存数量) SELECT 产品ID,SUM(-数量) FROM inserted WHERE NOT EXISTS(SELECT 1 FROM 库存表 WHERE 库存表.产品ID=inserted.产品ID)
netstarmjx 2018-05-11
  • 打赏
  • 举报
回复
此功能必须用到视图作为中间过程,否则不能实现
二月十六 版主 2018-05-09
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'出库表') is null
drop table 出库表
Go
Create table 出库表([ID] int,[品名] NVARCHAR(100),[产品ID] NVARCHAR(100),[出库数量] int)
GO
if not object_id(N'库存表') is null
drop table 库存表
Go
Create table 库存表([产品ID] int,[品名] int,[库存量] int)
Insert 库存表
select 1,1,10 union all
select 2,2,30
Go
--测试数据结束

CREATE TRIGGER test_tri ON  出库表 FOR INSERT
AS
UPDATE 库存表
SET 库存量 = 库存量 - Inserted.出库数量
FROM Inserted
WHERE 库存表.产品ID = Inserted.产品ID;

INSERT INTO  出库表
(
ID,
品名,
产品ID,
出库数量
)
VALUES
( 1, -- ID - int
N'1', -- 品名 - nvarchar(100)
N'1', -- 产品ID - nvarchar(100)
8 -- 出库数量 - int
)

SELECT * FROM 库存表


二月十六 版主 2018-05-09
  • 打赏
  • 举报
回复
CREATE TRIGGER test_tri ON  出库表 FOR INSERT
AS
UPDATE  库存表
SET 库存量 = 库存量 - Inserted.出库数量
FROM Inserted
WHERE  库存表.产品ID = Inserted.产品ID;
RINK_1 2018-05-09
  • 打赏
  • 举报
回复

create  trigger trigger_name on 出库表 for insert as 

update 库存表
set 库存量=B.库存量-A.出库数量
from inserted A
join 库存表 B on A.产品ID=B.产品ID

34,836

社区成员

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

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