• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

触发器问题(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表中添加此记录;
请多指教;
...全文
31 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2004-02-27 11:07
社区公告
暂无公告