BOM展阶!

wdsimon 2003-04-11 07:32:47

#BOM 单身表字段
PRODUCT --(主件),
ANO --(序号),
PARTNO --(元件),
NAME2 --(元件描述),
UNIT --(元件单位),
DIAOLOG --(元件属性,分采购自制),
SUN --(元件损耗率),
QTY --(组成用量))

CREATE PROCEDURE BOM_GEN
@PD CHAR(20),
@CN INT,
@I INT,
@MSG CHAR(100)
AS

BEGIN
IF @I=1 --是否为顶层
BEGIN
IF (SELECT COUNT(*)
FROM #BOM WHERE PRODUCT=@PD )=0
BEGIN
SET @MSG='BOM或配方资料有误,请检查!'
PRINT @MSG
END
ELSE
BEGI
SELECT @I AS BNO,STR(@I)+ANO AS -- BNO用来描述层次 1,2,3...
CNO,PRODUCT,ANO,PARTNO,NAME2,UNIT,DIAOLOG,SUN,QTY
INTO RESULT --CNO用来描述逐级层次 101,10101,10201...
FROM #BOM
WHERE PRODUCT=@PD
END
END
DECLARE @C CHAR(20) --@C接受游标赋值CNO
DECLARE @P CHAR(20)
DECLARE @L CHAR(2)
DECLARE @N float
DECLARE BOM_SEAR CURSOR FOR
SELECT CNO,PARTNO,DIAOLOG,QTY
FROM RESULT
WHERE BNO=@I and DIAOLOG<>'P' AND DIAOLOG<>'NULL'
OPEN BOM_SEAR
FETCH NEXT FROM BOM_SEAR
INTO @C,@P,@L,@N
WHILE @@FETCH_STATUS = 0
BEGIN
IF (SELECT COUNT(*)
FROM #BOM WHERE PRODUCT=@P )=0
BEGIN
SET @MSG=@p+'BOM或配方资料有误,请检查!'
PRINT @MSG
END
ELSE
BEGIN
INSERT INTO RESULT
SELECT @I+1 AS BNO,RTRIM(LTRIM(@C))+STR(@I+1)+ANO AS CNO,PRODUCT,ANO,PARTNO,NAME2,UNIT,DIAOLOG,SUN,QTY ---老报错说数据类型不符
FROM #BOM WHERE PRODUCT=@P
END
FETCH NEXT FROM BOM_SEAR
INTO @C,@P,@L,@N
END
CLOSE BOM_SEAR
DEALLOCATE BOM_SEAR
IF @I<@CN
BEGIN
SET @I=@I+1
exec BOM_GEN '',@CN,@I,''
END
END

执行存储过程得到结果表RESULT:
BNO --层次号1,2,3...
CNO --层次号101,101201,102,102201,102201301.....
PRODUCT --(主件),
ANO --(序号),
PARTNO --(元件),
NAME2 --(元件描述),
UNIT --(元件单位),
DIAOLOG --(元件属性,分采购自制),
SUN --(元件损耗率),
QTY --(组成用量))
然后把RESULT 按CNO排序,
用*1替换长度为3,***2替换,*****长度为替换长度为9....
得到一主件展阶结果如下:
阶层次序 料号 名称规格 类别 损耗率 单位 用量
*1 1010-91172CL #91172 Outta Sight Train Case-ACT-Clr 半成品 0 Pcs 72
**2 1010-9117201 #91172 Kit-A625T-Top Left set 半成品 0 Pcs 1
***3 1221-C051001 (C-Deep-CR27)-Tran.Pink182C w 半成品 0 Pcs 1
****4 0202PD51-0 (2001)(C-CR27) 2E-No.36-Textile 过渡性半成品 0 pcs 1
*****5 1222-E391007 CR27-E1142-平面纹 半成品 0 Pcs 1
*****6 3110-0CR2700 铝皿-CR27-0.30(t)cm 原材料 0 Pcs 1
*****6 PD-E1142 E1142 过渡性半成品 0 Kg 0.0008
*****5 1222-E391015 CR27-E1141-平面纹 半成品 0 Pcs 1
*****6 3110-0CR2700 铝皿-CR27-0.30(t)cm 原材料 0 Pcs 1
*****6 PD-E1141 E1141 过渡性半成品 0 Kg 0.0008
****4 3240-00C0113 粉罐-(C)-透明粉红182C带银葱盖 原材料 0 Pcs 1

但是在执行循环
INSERT INTO RESULT
SELECT @I+1 AS BNO,RTRIM(LTRIM(@C))+STR(@I+1)+ANO AS CNO,PRODUCT,ANO,PARTNO,NAME2,UNIT,DIAOLOG,SUN,QTY ---老报错说数据类型不符
FROM #BOM WHERE PRODUCT=@P
是老是报错后经检查发现@C CHAR(20)长度有问题,但不知如何解决,请高手帮助.
...全文
129 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
laker_tmj 2003-05-10
  • 打赏
  • 举报
回复
up
wdsimon 2003-04-15
  • 打赏
  • 举报
回复
谢谢caiyunxia,我已经找到答案。
LTRIM(STR(@I)+SUBSTRING(A.MD002,2,2))+SPACE(17) AS CNO

caiyunxia 2003-04-15
  • 打赏
  • 举报
回复

RTRIM(LTRIM(@C))+STR(@I+1)+LTRIM(cast(ANO as varchar(10) )
DavidBone 2003-04-15
  • 打赏
  • 举报
回复
ding
wdsimon 2003-04-11
  • 打赏
  • 举报
回复
补充一下:
@CN,用来定义可选层次.

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧