触发器问题(A表插入数据时,如何更新B表)

zmqcp31221 2004-02-27 11:07:08
有如下两个表
A表(进货表):字段如下:id(书号),isbn(条形码),in_num(进货数量)
B表(库存表):字段如下:b_id(书号),isbn(条形码),stock_num(库存数量),
如何能在A表插入数据的同时判断:
1;如果B表已经有此ISBN了,就更新此数据,让库存 数量累加;
2;如果B表中无此ISBN,那么就在B表中添加此记录;
请多指教;
...全文
97 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
popsn 2004-04-11
  • 打赏
  • 举报
回复
学习!
lyjhouston2004 2004-04-11
  • 打赏
  • 举报
回复
以上各位的没有考虑到并发控制
如果有并发操作如何呢?
netcoder 2004-04-10
  • 打赏
  • 举报
回复
create trigger trg_test
on A
for insert
as
declare @isbn varchar(50)
select @isbn=isbn from inserted
--如果B表已经有此ISBN了,就更新此数据,让库存 数量累加
if(exists(select * from b where isbn=@isbn))
update B set B.stock_num=b.stock_num+(select in_num from inserted) where B.isbn=@isbn
else
--如果B表中无此ISBN,那么就在B表中添加此记录
insert B(isbn,stock_num) select isbn,in_num from inserted
-------------------------------------------------------------------------------
--测试
--建立表
create table A(id int identity(1,1),isbn varchar(50),in_num int)
create table B(id int identity(1,1),isbn varchar(50),stock_num int)
go
--建立触发器
create trigger trg_test
on A
for insert
as
declare @isbn varchar(50)
select @isbn=isbn from inserted
--如果B表已经有此ISBN了,就更新此数据,让库存 数量累加
if(exists(select * from b where isbn=@isbn))
update B set B.stock_num=b.stock_num+(select in_num from inserted) where B.isbn=@isbn
else
--如果B表中无此ISBN,那么就在B表中添加此记录
insert B(isbn,stock_num) select isbn,in_num from inserted
GO

--插入模拟数据

insert into A values('ISDN_001',10)
insert into A values('ISDN_002',10)
insert into A values('ISDN_003',10)
insert into A values('ISDN_001',10)

--查询
select * from B

--结果
/**
id isbn stock_num
1 ISDN_001 20
2 ISDN_002 10
3 ISDN_003 10

**/
--删除测试表
drop table A
drop table B


gzapu 2004-04-07
  • 打赏
  • 举报
回复
up

34,838

社区成员

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

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