100分请教存储过程问题?
表 CKDA(仓库部门资料) 字段 ckbh,ckmc
01 中厨
02 面点
表 WLDA(物料资料) 字段 wlbh, wlmc, dj
1000 精肉 5.00
1001 味精 3.20
1002 糖 0.5
表 PF(配方表) 字段 cpbh wlbh yl
10000 1000 0.7
10000 1001 0.01
10000 1002 0.05
20000 1000 1.0
20000 3000 2.0
表 XFJLB(消费记录表) 字段 cpbh sl, cw lsh
10000 1 中厨 2006-1-1-0001
10000 2 中厨 2006-1-1-0001
20000 1 中厨 2006-1-1-0001
30000 1 面点 2006-1-1-0002
表 CKWL(分仓库存表) 字段 ckbh,ckmc,wlbh,wlmc,kcsl ,dj
01 中厨 1000 精肉 0.1 5.00
如果我在知道XFJLB中 lsh 值的情况下,我如何更新和向CKWL表中添加记录
首先更新 比如我知道lsh=2006-1-1-0001 我就要从XFJLB 中查出lsh=2006-1-1-0001 的记录
再根据cpbh 从PF中找wlbh,然后根据wlbh 和XFJLB中的cw来更新 CKWL表 让kcsl=kcsl-pf.yl*xfjlb.sl 这是一种情况
还有就是从CKWL表里原先没有合适的更新记录需要添加记录 ,添加CKDA中的ckbh,ckmc WLDA中的wlbh,wlmc,dj kcsl=-pf.yl*xfjlb.sl
请高手指点
我是这样写的可是,并没有达到要求,居然能添加相同的记录,一个lsh对应一个cpbh可以实现
但是lsh=2006-1-1-0001的相同的cpbh也有就是说一个lsh可能对应相同的cpbh
高手给看看,
问题2:如果存储过程执行的时间非常短,会不会出现并发的情况,第一个没有执行完或者第二个没有执行完的情况???????
CREATE PROCEDURE ckjl
@lsh as varchar(20)
AS
IF EXISTS(SELECT 1 FROM PF p, XFJLB x, CKWL c WHERE p.cpbh=x.cpbh AND p.wlbh=c.wlbh AND x.lsh=@lsh)
BEGIN
UPDATE c
SET c.sl=c.sl-p.yl*x.ls_sl
FROM PF p, XFJLB x, CKWL c
WHERE p.cpbh=x.cpbh
AND p.wlbh=c.wlbh
AND x.lsh=@lsh
END
ELSE
BEGIN
INSERT INTO CKWL(ckbh, ckmc, wlbh, wlmc, sl, pjdj)
SELECT k.ckbh, k.ckmc, w.wlbh, w.wlmc, -p.yl*x.ls_sl, w.dj
FROM CKDA k, WLDA w, PF p, XFJLB x
WHERE x.lsh=@lsh
AND x.ls_cw=k.ckmc
AND p.cpbh=x.cpbh
AND p.wlbh=w.wlbh
END
GO