我有tab1 产品表,表字段有id,phid,grade,number1等字段;tab2 入库表,表字段有id,phid,whid,grade,number1,number2 等字段;tab3 产品库存表,表字段有id,phid,whid,grade,number1,number2 等字段。这3张表的结构是这样的,现在的需求是这样的,如果产品A,它的等级是A级,在A库区入库这种产品10个时 ,他的等级A不变,产品库存表tab3也有A库区的等级A的产品A的20个,那么这个产品数量是10+20=30个。如果产品,等级,或库区不同,则新插入一条新的记录。这个需求要用存储过程怎么做?
首先 select a.phid,a.grade,a.number1,number2 into #t from tab2 left join tab1 on a.phid = b.phid
其次
select b.phid,a.grade,a.number1,number2 into #w from tab2 left join tab3 on a.phid = b.phid and a.whid = b.whid
接着
select @phid =a.phid,@grade=a.grade,@number1=a.number1,@number2=number2 from #t
select @phid2 =a.phid,@grade2=a.grade,@number1_1=a.number1,@number2_2=number2 from #2
然后
while @phid = @phid2 and @grade=@grade2 最后
update tab3 set number1=convert(int,@number1)+convert(int,@number1_1) where whid=@whid
我是这样做的,但是到 while @phid = @phid2 and @grade=@grade2 循环表字段判断phid ,grade 是否相等时,会有错误。
for insert
as--第一:修改库存表存在的数据,类似update a
set a.cnt = a.cnt + b.cnt
from kucun a join (select code,sum(cnt) cnt from inserted group by code) b
on a.code = b.code--第二:插入库存表不存在的codeinsert into kucun
select code,sum(cnt)
from inserted
group by code当然,这是个比较简单的解决思想,楼主可以引申下。
create procedure insertporcedure
(@kq nvarchar(10), --库区
@cpid int, --产品编号
@dj nvarchar(10), --等级
@sl int --数量
--可以加其他参数
)
as
begin
if exists(select 1 from 产品库存表 where 产品编号=@cpid and 库区=@kq and 等级=@dj)
update 产品库存表 set 数量=数量+@sl where 产品编号=@cpid and 库区=@kq and 等级=@dj
else
insert into 产品库存表(产品编号,库区,等级,数量) select @cpid,@kq,@dj,@sl)
end
select code,sum(cnt)
from inserted t
where not exists (select 1 from kucun where code = t.code)
group by code
insert into tab2(phid,whid,grade,number1,number2) values (@phid,@whid,@grade,@number1,@number2)
2、修改库存表
update tab3 set
number1 = isnull(number1,0) + @number1
,number2 = isnull(number2,0) + @number2
where phid = @phid
and whid = @whid
and grade = @grade3、如果修改记录条数0(没有重复的)
if @@rowcount <=0
4、 插入库存表
insert into tab3(phid,whid,grade,number1,number2) values (@phid,@whid,@grade,@number1,@number2)连接条件没说清楚,可能有些问题
“if exists(select 1 from 产品库存表 where 产品编号=@cpid and 库区=@kq and 等级=@dj)
update 产品库存表 set 数量=数量+@sl where 产品编号=@cpid and 库区=@kq and 等级=@dj”
这样只能Update一条库存表的记录,如果有2个以上产品id,等级id,库区id一样的话,这样是不行的。
这2个表,phid,whid,grade 都相等,我用 while phid=phid2 and grade=grade2 and whid=whid2
只能更新1条记录,而且在这个记录上累加,怎么会这样?要怎么做呢??
字段说明:
phid - 产品id;whid - 库区id ; grade - 产品等级id; number - 产品数量