你的BOM结构是有问题的,怎么可能出现一个D中还有一个D,你现在找出来想干什么?
解决方案 »
- sql server 2005 中怎样用Business Intelligence Development studio 做报表啊?
- 用T-SQL来计算小学数学了。
- INSERT INTO的参数化查询要怎么写
- SQL语句Select出现问题,请大家进来帮忙看看!
- 求存储过程,在线等!!!
- 如何取最后的4个值?
- .dat文件打不开?高手帮我看看,感激不尽了.
- 求一条SQL语句
- SQL 语句规范性问题,不可不看
- 请教:如何快速查找到一个字符串中的非a-z、A-Z、0-9、中文字符之外的字符存在,并删除!(数据量大)-急!
- 关于Case语句,请高手指点,急急急!!!
- 要返回这样的结果集,如何组合sql语句?
2:下一层的序号用上一层的序号加上本层的序号表示(如第二层用AA,AB,AC,BA,BB,BC ... )表示
3: 层次为1的开始循环,设定最大循环次数(如20)
查所有头几位序号相同且层次大于当前层次的料号是否相同。
eg:
A
|
-----------------------------
| | |
B C D
------ ------------------
| | | | |
D0 D D1 D2 D3
|
----------
| |
D D4
如例:
存到临时表的资料为
序号 层次 料号
A 0 A
AA 1 B
AB 1 C
AC 1 D
ABA 2 D0
ABB 2 D
ACA 2 D1
ACB 2 D2
ACC 2 D3
ACBA 3 D
ACBB 3 D4第一次循环:查序号第一位为A且层次大于0的料号是否有相同的(无)
第二次循环:查序号头两位为AA且层次大于1的料号是否有相同的(无)
第三次循环:查序号头两位为AB且层次大于1的料号是否有相同的(无)
第四次循环:查序号头两位为AC且层次大于1的料号是否有相同的(有,为ACBA,层次为3,料号为D)
因为我的BOM系统是用主从表的结构做了,当工程人员在架设BOM时,由于BOM层数多且复九,在做第4-6层是,时不是不小心,把BOM单身中的半成品编号又调用到了第2或3层中的半成品编号,所以有BOM死循环的情况。
http://expert.csdn.net/Expert/topic/1375/1375432.xml?temp=.8570978
--得到当前ID到顶层的ID串
declare @aa varchar(8000)
set @aa=dbo.fn_32gettopclass(78,default,1,default)
print @aaselect * from 表 where charindex(','''+cast(tc_id as varchar)+',''' , ','''+dbo.fn_32gettopclass(78,default,1,default)+'''')>0
A1
|
-----------------------------
| | |
B C D
------ ------------------
| | | | |
D0 D D1 D2 D3
|
----------
| |
D D4
A2
|
------------------------------
| | |
B C D
------
| |
D0 D
itemNo,llc
2:BOM中至少有这两个字段 (树状)
parentItem,itemNo
3:Create Procedure LLC
As
Update 物料主文件 set llc = 0 --先将LLC全部清为0
Declare @i tinyint
Set @i = 0
While @i <= 10 -- 假设BOM最多只有10层
Begin
Update a Set a.llc = @i + 1 --子结点的LLC加1
From 物料主文件 a
Join bom b on a.itemNo = b.itemNo
Join 物料主文件 c on c.itemNo = b.parentItem
where c.llc = @i
Set @i = @i + 1
End/*********** Usage: Exec LLC *******/
如上:
先算最低层码,假设BOM中最多只有8层,你算出来如果有最低层码为10的,那就一定有问题了。