请教大虾:
表A:
仓库ID 物资ID 物资数量
1 1 2
1 2 2
我向其中插入数据时,如果插入的物资在同一个仓库中存在,如(1,2,2),则将原有的物资数量相加;如果插入的物资不在表A中如(2,1,2),则将新纪录添加进去。
请问如何用触发器实现?
解决即结贴给分 谢谢~
表A:
仓库ID 物资ID 物资数量
1 1 2
1 2 2
我向其中插入数据时,如果插入的物资在同一个仓库中存在,如(1,2,2),则将原有的物资数量相加;如果插入的物资不在表A中如(2,1,2),则将新纪录添加进去。
请问如何用触发器实现?
解决即结贴给分 谢谢~
再判断count
没有的话就用insert
有的话就update
create trigger tri_A
on A
for INSTEAD OF INSERT
as
begin
if exists(select * from inserted i,A a where i.仓库ID=a.仓库ID and i.物资ID=a.物资ID)
update A set 物资数量=i.物资数量 from inserted i,A a where i.仓库ID=a.仓库ID and i.物资ID=a.物资ID
else
insert A select * from inserted
end
一次更新多行数据。如果在程序里判断,则要逐行检查
所以用的触发器。
现在解决,谢谢各位!
给分
--测试数据
Create table tb1(仓库ID int,物资ID int,物资数量 int)
insert into tb1 select 1,1,2
go
--创建触发器
Create TRIGGER Tr_Test
ON tb1
instead of INSERT
AS
BEGIN
if exists(select 1 from tb1 A inner join inserted B on A.仓库ID=B.仓库ID and A.物资ID=B.物资ID)
begin
update A
set A.物资数量=A.物资数量+B.物资数量
from tb1 A ,inserted B
where A.仓库ID=B.仓库ID and A.物资ID=B.物资ID
end
else
begin
insert into tb1 select B.* from tb1 A inner join inserted B on A.仓库ID=B.仓库ID and A.物资ID<>B.物资ID
end
end
go
--输入数据insert into tb1 select 1,1,2
insert into tb1 select 1,1,2
insert into tb1 select 1,2,2
go
--查看结果select * from tb1
go
--删除环境drop trigger Tr_Test
drop table tb1