日期:2014-05-18  浏览次数:20549 次

机械类生产计划与BOM生成物料相关需求的存储过程(向大家请教如何修改)
表结构(测试方案)
生产计划   scjh
scjh,   xsdd,cpbh,jhsl(生产计划,销售订单、产品编号,计划数量)
测试记录
(scjh083001,xsdd083001,cpbh000001,300.00)
产品结构bom
cpbh,gybh,wlbh,sl,shl(产品编号,工艺编号,物料/半成品编号,数量,损耗率)
测试记录
理想情况下认为对半成品的数量需求为1,损耗率为0
(cpbh000001,gybh000001,cpbh000002,1,0)
(cpbh000001,gybh000001,wlbh000001,3,0.02)
(cpbh000002,gybh000002,cpbh000003,1,0)
(cpbh000002,gybh000002,wlbh000002,4,0.02)
(cpbh000003,gybh000003,wlbh000003,4,0.02)

相关需求xgxq
Scjh,xsdd,cpbh,wlbh   ,xqsl(生产计划,销售订单,产品编号,物料编号,需求数量)
产品、半成品命名规则一样,如cpbh000001,物料编号,wlbh000001


create   proc   p(@scbh   varchar(10),@xsdd   varchar(10),@cpbh   varchar(10),@jhsl   decimal(18,2))
as
declare   @cpbh1   varchar(10),@cpbh2   varchar(10),@sl   decimal(18,2),@shl   decimal(18,2)
declare   @wlbh   varchar(10)
@cpbh2   =   @cpbh
do
declare   cur   cursor   for
select   bom.cpbh,bom.wlbh,bom.sl,bom,shl
from   bom
where   bom.cpbh=@cpbh
open   cur
fetch       next       from       cur       into   @cpbh1,@wlbh,@sl,@shl
while     @@fetch_status=0  
begin
if   left(@wlbh,2)== 'wl '
begin
insert   into   xgxq(scbh,xsdd,cpbh,wlbh,xqsl)   values   (@scbh,@xsdd,@cpbh2,@wlbh,@jhsl*@sl*@shl)
@cpbh=@wlbh
end
else
begin
@cpbh=@wlbh
end
fetch       next       from       cur       into   @cpbh1,@wlbh,@sl,@shl
end
close       cur      
deallocate       cur      
while   left(@cpbh,2)== 'cp '
go

错误:
服务器:   消息   170,级别   15,状态   1,过程   p,行   5
第   5   行:   '@cpbh2 '   附近有语法错误。
服务器:   消息   137,级别   15,状态   1,过程   p,行   12
必须声明变量   '@wlbh '。
服务器:   消息   137,级别   15,状态   1,过程   p,行   15
必须声明变量   '@wlbh '。
服务器:   消息   137,级别   15,状态   1,过程   p,行   17
必须声明变量   '@wlbh '。
服务器:   消息   137,级别   15,状态   1,过程   p,行   24
必须声明变量   '@wlbh '。
服务器:   消息   170,级别   15,状态   1,过程   p,行   28
第   28   行:   '= '   附近有语法错误。

请高手帮忙看看@wlbh变量我声明了,怎么出错呢
还有其他的错误请高手帮忙看看

------解决方案--------------------
不行的,用while ()循环,可以這樣寫

while
(
....

if left(@cpbh,2)= 'cp '
break

)