拜求BOM表原材料展开递归查询

时间:2022-09-19 10:56:34
总BOM表拆分展开:

 一:数据库简述:
数据库环境:SQL2000环境  
 数据存在 T_BOM中,
 T_BOM的主要提取数据成员:
BOM_NO为BOM代号
PRD_NO为BOM包含的品号
QTY:库存数量
WH_NO:仓库号,200A为原材料,300A为半成品
 
二:基本要求:要求查找任意一个 BOM号下的所有原材料

  [分析]
   1) 一个BOM号下对应有许多品号,其中有半成品,原材料
  如果是半成品则此一行数据中WH_NO为300A,如果是原材料则是200A
    
   2):半成品以910开头,比如这一行数据:

  select * from T_BOM

-------------结果:
 BOM_NO          PRD_NO            QTY              WH_NO
 
910-HVR700-00->  387-SDA010-W0      120             200A
910-HVR700-00->  910-025000-02      80               300A  ----其中这个BOM号就有半成品910-025000-02 

那么数据库如何查到910-025000-02这个半成品的所有原材料,这样:

910-025000-02+'->' 作为新的BOM_NO去T_BOM 表中查

select * from T_BOM where BOM_NO=910-025000-02+'->' 就会对应的查出所有的910-025000-02+'->'的料号

------问题又来了,910-025000-02+'->'这个半成品号可能还有910开头的半成品料号,也是像这样,以它的 PRD_NO加
上'->'号作BOM号去 T_BOM查询就可以了.


三:最终的要求:


 
   1) 现要查询T_BOM中以910开头的BOM号的所有原材料

  

   2)问题是,

  T_BOM中每一个BOM号下有原材料也有半成品(以910开头),
半成品里还包含半成品,层数不定

而最终要查出某个BOM号下的所有原材料(是半成品的要进行分解)


我曾这样去求解:

 -----仅仅是求出,每一个BOM号下的所有本成品展开的原材料,可是数据库报:异动冲突

create function GetChildren 
(
  @BO_MS varchar(200)
)
returns @t table(BO_MS varchar(200))
as
  begin
    insert @t select BOM_NO from TF_BOM where  PRD_NO+'->'= @BO_MS
   while @@rowcount > 0
       insert @t(BO_MS)
 select a.BOM_NO  
    from TF_BOM as a inner join @t as b  
        on a.PRD_NO+'->' = b.BO_MS   and a.BOM_NO not in(select BO_MS from @t)  
  return
end
---------------------------
问题还是没解决,第一次来 CSDN,听朋友说此处高手如云,号称中国第一程序员社区,怀着激动又焦虑的心情,特来求教
请高手帮忙,先谢了.

28 个解决方案

#1


拜求BOM表原材料展开递归查询

还能简化点要求呢,哪里有问题?

什么样的数据,结果需要什么样的?

#2


引用 1 楼 watergg 的回复:
还能简化点要求呢,哪里有问题?

什么样的数据,结果需要什么样的?

上面的代码吗?
SQL下提示:
Msg 446, Level 16, State 9, Procedure GetChildren, Line 10
無法解析 equal to 動作的定序衝突。

#3


给测试数据,和需要的结果

#4


引用 1 楼 watergg 的回复:
还能简化点要求呢,哪里有问题?

什么样的数据,结果需要什么样的?


只有一个要求:那就是比如一个BOM号找出其所有的原材料(如果含有半成品的要拆分出原材料出来) 以这样一张表列出BOM_NO,PRD_NO,QTY,WH_NO
-------

#5


2000貌似不能直接用递归的.

#6


select * from T_BOM where BOM_NO like '910%' or PRD_NO like '910%'

#7


拜求BOM表原材料展开递归查询

#8


╮(╯▽╰)╭,让给点测试数据,就那么困难。。。数据保密??

算了,睡觉去了

#9


引用 3 楼 watergg 的回复:
给测试数据,和需要的结果


         其本数据:

这里没有本地上传图片不方便只好手打字了:
select BOM_NO,PRD_NO,QTY,WH_NO from T_BOM where BOM_NO='910-HVR700-00->'

------输出结果:
BOM_NO                PRD_NO                   QTY          WH_NO
 
910-HVR700-00->      099-F223V3-00            200          200A
910-HVR700-00->      599-F213V4-00            300          200A
910-HVR700-00->      399-F243V3-00             400         200A
910-HVR700-00->      199-F223V3-00             500         200A           
910-HVR700-00->      910-HVR700-03       300 300A     ----这里大家家看到吧910开头的又有子节点,那么要查询910-HVR700-03这个半成品的信息如何查呢?
这样:910-HVR700-03 +'->'

  select BOM_NO,PRD_NO,QTY,WH_NO from T_BOM where BOM_NO='910-HVR700-03 +'->'
然后就有:
-------------------------                                                       
BOM_NO                PRD_NO                   QTY          WH_NO
 
910-HVR700-03->      099-F223V3-00            200          200A
910-HVR700-03->     599-F213V4-00            300          200A
910-HVR700-03->      399-F243V3-00             400         200A
910-HVR700-03->     199-F223V3-00             500         200A 
910-HVR700-03->     910-F223V13-00             500         200A ---这里又有子节点
------------------------------------------------------------------
















数据测试贴图:

#10


引用 6 楼 qianjin036a 的回复:
SQL code
select * from T_BOM where BOM_NO like '910%' or PRD_NO like '910%'


这样肯定是不行的,没有递归,因为BOM_NO下还有半成品,还要进行提出来的,而且不止一层.

#11


引用 9 楼 sukeman 的回复:
引用 3 楼 watergg 的回复:
给测试数据,和需要的结果


  其本数据:

这里没有本地上传图片不方便只好手打字了:
select BOM_NO,PRD_NO,QTY,WH_NO from T_BOM where BOM_NO='910-HVR700-00->'

------输出结果:
BOM_NO PRD_NO QTY WH_NO
 
910-HVR700-……


修正说明一下,上面的基本数据中
select BOM_NO,PRD_NO,QTY,WH_NO from T_BOM where BOM_NO='910-HVR700-03 +'->'
然后就有:
-------------------------   
BOM_NO PRD_NO QTY WH_NO
 
910-HVR700-03-> 099-F223V3-00 200 200A
910-HVR700-03-> 599-F213V4-00 300 200A
910-HVR700-03-> 399-F243V3-00 400 200A
910-HVR700-03-> 199-F223V3-00 500 200A  
910-HVR700-03-> 910-F223V13-00 500 300A ---这里又有子节点------------------------------------------------------------------

#12


有没有这种情况》?
a->b
b->a
a,b都是半成品,这样死循环,死循环要考虑多阶a->b,b->c,c->a......

其他的我来想想看怎么写

#13


引用 12 楼 sean_zhou 的回复:
有没有这种情况》?
a->b
b->a
a,b都是半成品,这样死循环,死循环要考虑多阶a->b,b->c,c->a......

其他的我来想想看怎么写

再次确定了,没有这种情况,不用考虑多阶
不过要提取任意一个BOM号的全部原料(全部展开搜索.)

#14


-- 建个函数,返回所有子项列表
if object_id('GetBom','TF') is not null
    drop function GetBom
go

create function GetBom(@BOM_NO Varchar(100))
returns @tb table(BOM_NO Varchar(100), PRD_NO Varchar(100), QTY int, WH_NO Varchar(50)) 
AS
begin
    declare @i int
    set @i = 0
    declare @t table(BOM_NO Varchar(100), PRD_NO Varchar(100), QTY int, WH_NO Varchar(50), LV int)

    insert @t select BOM_NO,PRD_NO,QTY,WH_NO,0 from T_BOM where BOM_NO=@BOM_NO

    while @i <= 10 AND @@RowCount <> 0 --这里我假定你的层次不超过10级(可自行修改)
    begin
        set @i = @i + 1

        insert @t
        select a.BOM_NO,a.PRD_NO,a.QTY,a.WH_NO,@i from T_BOM a
join @t b on a.BOM_NO = b.PRD_NO+'->'
where b.LV = @i-1
    end

    insert @tb select BOM_NO,PRD_NO,QTY,WH_NO from @t 

    return
end
go

--使用的时候这样调用
select * from dbo.GetBom('910-HVR700-00->')


未经测试...
如OK,记得结贴哦

#15


感谢这晚还在为我解题,我试了下,
服务器里报错:
Msg 446, Level 16, State 9, Procedure GetBom, Line 16
無法解析 equal to 動作的定序衝突。
Msg 208, Level 16, State 1, Line 3
無效的物件名稱 'dbo.GetBom'。

#16


可以加我QQ,演示给你看:QQ291366195

#17


--> 测试数据: #TB
if object_id('tempdb.dbo.#TB') is not null drop table #TB
GO
create table #TB (BOM_NO varchar(15),PRD_NO varchar(14),QTY int,WH_NO varchar(4))
insert into #TB
select '910-HVR700-00->','099-F223V3-00',200,'200A' union all
select '910-HVR700-01->','599-F213V4-00',300,'200A' union all
select '910-HVR700-02->','399-F243V3-00',400,'200A' union all
select '910-HVR700-00->','199-F223V3-00',500,'200A' union all
select '910-HVR700-00->','910-HVR700-03',300,'300A' union all
select '910-HVR700-03->','099-F223V3-00',200,'200A' union all
select '910-HVR700-04->','599-F213V4-00',300,'200A' union all
select '910-HVR700-05->','399-F243V3-00',400,'200A' union all
select '910-HVR700-06->','199-F223V3-00',500,'200A' union all
select '910-HVR700-03->','910-F223V13-00',500,'200A'

;WITH CTE AS
(
select * from #TB WHERE BOM_NO='910-HVR700-00->'
UNION ALL 
SELECT A.* FROM #TB A,CTE B WHERE A.BOM_NO=B.PRD_NO+'->'
)
SELECT * FROM CTE

BOM_NO          PRD_NO         QTY         WH_NO
--------------- -------------- ----------- -----
910-HVR700-00-> 099-F223V3-00  200         200A
910-HVR700-00-> 199-F223V3-00  500         200A
910-HVR700-00-> 910-HVR700-03  300         300A
910-HVR700-03-> 099-F223V3-00  200         200A
910-HVR700-03-> 910-F223V13-00 500         200A

(5 行受影响)

#18


修改了一些数据

#19


引用 17 楼 watergg 的回复:
SQL code
--> 测试数据: #TB
if object_id('tempdb.dbo.#TB') is not null drop table #TB
GO
create table #TB (BOM_NO varchar(15),PRD_NO varchar(14),QTY int,WH_NO varchar(4))
insert into #TB
select '910-……


兄台,你这是SQL2005的吧,SQL2000没有WITH CTE AS
批处理吧.

#20


--> 测试数据: #TB
if object_id('tempdb.dbo.#TB') is not null drop table #TB
GO
create table #TB (BOM_NO varchar(15),PRD_NO varchar(14),QTY int,WH_NO varchar(4))
insert into #TB
select '910-HVR700-00->','099-F223V3-00',200,'200A' union all
select '910-HVR700-01->','599-F213V4-00',300,'200A' union all
select '910-HVR700-02->','399-F243V3-00',400,'200A' union all
select '910-HVR700-00->','199-F223V3-00',500,'200A' union all
select '910-HVR700-00->','910-HVR700-03',300,'300A' union all
select '910-HVR700-03->','099-F223V3-00',200,'200A' union all
select '910-HVR700-04->','599-F213V4-00',300,'200A' union all
select '910-HVR700-05->','399-F243V3-00',400,'200A' union all
select '910-HVR700-06->','199-F223V3-00',500,'200A' union all
select '910-HVR700-03->','910-F223V13-00',500,'200A'

 

if object_id('tempdb.dbo.#T') is not null drop table #T
GO
create table #T(BOM_NO varchar(15),PRD_NO varchar(14),QTY int,WH_NO varchar(4),lg int)

declare @lg int
set @lg=0

insert #t select *,@lg from #tb where BOM_NO='910-HVR700-00->'

while exists(select 1 from #t a,#tb b where a.PRD_NO+'->'=b.BOM_NO and a.lg=@lg)
begin
insert #t select b.*,@lg+1 from #t a,#tb b where a.PRD_NO+'->'=b.BOM_NO and a.lg=@lg
set @lg=@lg+1
end

 
select * from #t

BOM_NO          PRD_NO         QTY         WH_NO lg
--------------- -------------- ----------- ----- -----------
910-HVR700-00-> 099-F223V3-00  200         200A  0
910-HVR700-00-> 199-F223V3-00  500         200A  0
910-HVR700-00-> 910-HVR700-03  300         300A  0
910-HVR700-03-> 910-F223V13-00 500         200A  1
910-HVR700-03-> 099-F223V3-00  200         200A  1

(5 行受影响)

#21


if object_id('tempdb.dbo.#T') is not null drop table #T
GO
create table #T(BOM_NO varchar(15),PRD_NO varchar(14),QTY int,WH_NO varchar(4),lg int)

declare @lg int
set @lg=0

insert #t select BOM_NO,PRD_NO,QTY,WH_NO,@lg from T_BOM where BOM_NO='910-HVR700-00->'

while exists(select 1 from #t a,T_BOM b where a.PRD_NO+'->'=b.BOM_NO and a.lg=@lg)
begin
    insert #t select b.*,@lg+1 from #t a,T_BOM b where a.PRD_NO+'->'=b.BOM_NO and a.lg=@lg
    set @lg=@lg+1
end

我替换掉了,可是也是显示:

Msg 446, Level 16, State 9, Line 8
無法解析 equal to 動作的定序衝突。
 
select * from #t

#22


为什么老是显示 無法解析 equal to 動作的定序衝突。
这个,我也感觉coleling
和WaterGG
语法等没有问题的,可是不知道为什么老是这样,我的是SQL2000server繁体的,
客户端是用SQL2005Studio连上去的,都是繁体版,服务器对字符大小写敏感.里面是真实的数据

#23


引用 21 楼 sukeman 的回复:
if object_id('tempdb.dbo.#T') is not null drop table #T
GO
create table #T(BOM_NO varchar(15),PRD_NO varchar(14),QTY int,WH_NO varchar(4),lg int)

declare @lg int
set @lg=0

insert #t select BO……


用RapidSQL连上去调试了,
     insert @t -------这个地方SQL显示断点错误:10:01:42.461 DBMS 192.168.3.4 -- Error:  無法解析 equal to 動作的定序衝突。(42000,446) Procedure(GetBom), Batch 2 Line 15
---------另外waterGG的在这里报错:
while exists(select 1 from #t a,TF_BOM b where a.PRD_NO+'->'=b.BOM_NO and a.lg=@lg) ---也是断点显示 無法解析 equal to 動作的定序衝突

--------------------





#24


该回复于2010-12-23 11:27:59被版主删除

#25


该回复于2010-12-23 14:02:27被版主删除

#26


晕,解决问题呢,你这是搞什么啊.

#27


难道没有解决的办法了吗?

#28


首先非常感谢上面的大哥,大姐关注,特别感谢上面的朋友出手相助,
请恕我无知,是不是

法解析 equal to 動作的定序衝突  是不是这个问题太简单了,而令你们也不说话了.还是什么原因呢?
请指定一下吗?

#1


拜求BOM表原材料展开递归查询

还能简化点要求呢,哪里有问题?

什么样的数据,结果需要什么样的?

#2


引用 1 楼 watergg 的回复:
还能简化点要求呢,哪里有问题?

什么样的数据,结果需要什么样的?

上面的代码吗?
SQL下提示:
Msg 446, Level 16, State 9, Procedure GetChildren, Line 10
無法解析 equal to 動作的定序衝突。

#3


给测试数据,和需要的结果

#4


引用 1 楼 watergg 的回复:
还能简化点要求呢,哪里有问题?

什么样的数据,结果需要什么样的?


只有一个要求:那就是比如一个BOM号找出其所有的原材料(如果含有半成品的要拆分出原材料出来) 以这样一张表列出BOM_NO,PRD_NO,QTY,WH_NO
-------

#5


2000貌似不能直接用递归的.

#6


select * from T_BOM where BOM_NO like '910%' or PRD_NO like '910%'

#7


拜求BOM表原材料展开递归查询

#8


╮(╯▽╰)╭,让给点测试数据,就那么困难。。。数据保密??

算了,睡觉去了

#9


引用 3 楼 watergg 的回复:
给测试数据,和需要的结果


         其本数据:

这里没有本地上传图片不方便只好手打字了:
select BOM_NO,PRD_NO,QTY,WH_NO from T_BOM where BOM_NO='910-HVR700-00->'

------输出结果:
BOM_NO                PRD_NO                   QTY          WH_NO
 
910-HVR700-00->      099-F223V3-00            200          200A
910-HVR700-00->      599-F213V4-00            300          200A
910-HVR700-00->      399-F243V3-00             400         200A
910-HVR700-00->      199-F223V3-00             500         200A           
910-HVR700-00->      910-HVR700-03       300 300A     ----这里大家家看到吧910开头的又有子节点,那么要查询910-HVR700-03这个半成品的信息如何查呢?
这样:910-HVR700-03 +'->'

  select BOM_NO,PRD_NO,QTY,WH_NO from T_BOM where BOM_NO='910-HVR700-03 +'->'
然后就有:
-------------------------                                                       
BOM_NO                PRD_NO                   QTY          WH_NO
 
910-HVR700-03->      099-F223V3-00            200          200A
910-HVR700-03->     599-F213V4-00            300          200A
910-HVR700-03->      399-F243V3-00             400         200A
910-HVR700-03->     199-F223V3-00             500         200A 
910-HVR700-03->     910-F223V13-00             500         200A ---这里又有子节点
------------------------------------------------------------------
















数据测试贴图:

#10


引用 6 楼 qianjin036a 的回复:
SQL code
select * from T_BOM where BOM_NO like '910%' or PRD_NO like '910%'


这样肯定是不行的,没有递归,因为BOM_NO下还有半成品,还要进行提出来的,而且不止一层.

#11


引用 9 楼 sukeman 的回复:
引用 3 楼 watergg 的回复:
给测试数据,和需要的结果


  其本数据:

这里没有本地上传图片不方便只好手打字了:
select BOM_NO,PRD_NO,QTY,WH_NO from T_BOM where BOM_NO='910-HVR700-00->'

------输出结果:
BOM_NO PRD_NO QTY WH_NO
 
910-HVR700-……


修正说明一下,上面的基本数据中
select BOM_NO,PRD_NO,QTY,WH_NO from T_BOM where BOM_NO='910-HVR700-03 +'->'
然后就有:
-------------------------   
BOM_NO PRD_NO QTY WH_NO
 
910-HVR700-03-> 099-F223V3-00 200 200A
910-HVR700-03-> 599-F213V4-00 300 200A
910-HVR700-03-> 399-F243V3-00 400 200A
910-HVR700-03-> 199-F223V3-00 500 200A  
910-HVR700-03-> 910-F223V13-00 500 300A ---这里又有子节点------------------------------------------------------------------

#12


有没有这种情况》?
a->b
b->a
a,b都是半成品,这样死循环,死循环要考虑多阶a->b,b->c,c->a......

其他的我来想想看怎么写

#13


引用 12 楼 sean_zhou 的回复:
有没有这种情况》?
a->b
b->a
a,b都是半成品,这样死循环,死循环要考虑多阶a->b,b->c,c->a......

其他的我来想想看怎么写

再次确定了,没有这种情况,不用考虑多阶
不过要提取任意一个BOM号的全部原料(全部展开搜索.)

#14


-- 建个函数,返回所有子项列表
if object_id('GetBom','TF') is not null
    drop function GetBom
go

create function GetBom(@BOM_NO Varchar(100))
returns @tb table(BOM_NO Varchar(100), PRD_NO Varchar(100), QTY int, WH_NO Varchar(50)) 
AS
begin
    declare @i int
    set @i = 0
    declare @t table(BOM_NO Varchar(100), PRD_NO Varchar(100), QTY int, WH_NO Varchar(50), LV int)

    insert @t select BOM_NO,PRD_NO,QTY,WH_NO,0 from T_BOM where BOM_NO=@BOM_NO

    while @i <= 10 AND @@RowCount <> 0 --这里我假定你的层次不超过10级(可自行修改)
    begin
        set @i = @i + 1

        insert @t
        select a.BOM_NO,a.PRD_NO,a.QTY,a.WH_NO,@i from T_BOM a
join @t b on a.BOM_NO = b.PRD_NO+'->'
where b.LV = @i-1
    end

    insert @tb select BOM_NO,PRD_NO,QTY,WH_NO from @t 

    return
end
go

--使用的时候这样调用
select * from dbo.GetBom('910-HVR700-00->')


未经测试...
如OK,记得结贴哦

#15


感谢这晚还在为我解题,我试了下,
服务器里报错:
Msg 446, Level 16, State 9, Procedure GetBom, Line 16
無法解析 equal to 動作的定序衝突。
Msg 208, Level 16, State 1, Line 3
無效的物件名稱 'dbo.GetBom'。

#16


可以加我QQ,演示给你看:QQ291366195

#17


--> 测试数据: #TB
if object_id('tempdb.dbo.#TB') is not null drop table #TB
GO
create table #TB (BOM_NO varchar(15),PRD_NO varchar(14),QTY int,WH_NO varchar(4))
insert into #TB
select '910-HVR700-00->','099-F223V3-00',200,'200A' union all
select '910-HVR700-01->','599-F213V4-00',300,'200A' union all
select '910-HVR700-02->','399-F243V3-00',400,'200A' union all
select '910-HVR700-00->','199-F223V3-00',500,'200A' union all
select '910-HVR700-00->','910-HVR700-03',300,'300A' union all
select '910-HVR700-03->','099-F223V3-00',200,'200A' union all
select '910-HVR700-04->','599-F213V4-00',300,'200A' union all
select '910-HVR700-05->','399-F243V3-00',400,'200A' union all
select '910-HVR700-06->','199-F223V3-00',500,'200A' union all
select '910-HVR700-03->','910-F223V13-00',500,'200A'

;WITH CTE AS
(
select * from #TB WHERE BOM_NO='910-HVR700-00->'
UNION ALL 
SELECT A.* FROM #TB A,CTE B WHERE A.BOM_NO=B.PRD_NO+'->'
)
SELECT * FROM CTE

BOM_NO          PRD_NO         QTY         WH_NO
--------------- -------------- ----------- -----
910-HVR700-00-> 099-F223V3-00  200         200A
910-HVR700-00-> 199-F223V3-00  500         200A
910-HVR700-00-> 910-HVR700-03  300         300A
910-HVR700-03-> 099-F223V3-00  200         200A
910-HVR700-03-> 910-F223V13-00 500         200A

(5 行受影响)

#18


修改了一些数据

#19


引用 17 楼 watergg 的回复:
SQL code
--> 测试数据: #TB
if object_id('tempdb.dbo.#TB') is not null drop table #TB
GO
create table #TB (BOM_NO varchar(15),PRD_NO varchar(14),QTY int,WH_NO varchar(4))
insert into #TB
select '910-……


兄台,你这是SQL2005的吧,SQL2000没有WITH CTE AS
批处理吧.

#20


--> 测试数据: #TB
if object_id('tempdb.dbo.#TB') is not null drop table #TB
GO
create table #TB (BOM_NO varchar(15),PRD_NO varchar(14),QTY int,WH_NO varchar(4))
insert into #TB
select '910-HVR700-00->','099-F223V3-00',200,'200A' union all
select '910-HVR700-01->','599-F213V4-00',300,'200A' union all
select '910-HVR700-02->','399-F243V3-00',400,'200A' union all
select '910-HVR700-00->','199-F223V3-00',500,'200A' union all
select '910-HVR700-00->','910-HVR700-03',300,'300A' union all
select '910-HVR700-03->','099-F223V3-00',200,'200A' union all
select '910-HVR700-04->','599-F213V4-00',300,'200A' union all
select '910-HVR700-05->','399-F243V3-00',400,'200A' union all
select '910-HVR700-06->','199-F223V3-00',500,'200A' union all
select '910-HVR700-03->','910-F223V13-00',500,'200A'

 

if object_id('tempdb.dbo.#T') is not null drop table #T
GO
create table #T(BOM_NO varchar(15),PRD_NO varchar(14),QTY int,WH_NO varchar(4),lg int)

declare @lg int
set @lg=0

insert #t select *,@lg from #tb where BOM_NO='910-HVR700-00->'

while exists(select 1 from #t a,#tb b where a.PRD_NO+'->'=b.BOM_NO and a.lg=@lg)
begin
insert #t select b.*,@lg+1 from #t a,#tb b where a.PRD_NO+'->'=b.BOM_NO and a.lg=@lg
set @lg=@lg+1
end

 
select * from #t

BOM_NO          PRD_NO         QTY         WH_NO lg
--------------- -------------- ----------- ----- -----------
910-HVR700-00-> 099-F223V3-00  200         200A  0
910-HVR700-00-> 199-F223V3-00  500         200A  0
910-HVR700-00-> 910-HVR700-03  300         300A  0
910-HVR700-03-> 910-F223V13-00 500         200A  1
910-HVR700-03-> 099-F223V3-00  200         200A  1

(5 行受影响)

#21


if object_id('tempdb.dbo.#T') is not null drop table #T
GO
create table #T(BOM_NO varchar(15),PRD_NO varchar(14),QTY int,WH_NO varchar(4),lg int)

declare @lg int
set @lg=0

insert #t select BOM_NO,PRD_NO,QTY,WH_NO,@lg from T_BOM where BOM_NO='910-HVR700-00->'

while exists(select 1 from #t a,T_BOM b where a.PRD_NO+'->'=b.BOM_NO and a.lg=@lg)
begin
    insert #t select b.*,@lg+1 from #t a,T_BOM b where a.PRD_NO+'->'=b.BOM_NO and a.lg=@lg
    set @lg=@lg+1
end

我替换掉了,可是也是显示:

Msg 446, Level 16, State 9, Line 8
無法解析 equal to 動作的定序衝突。
 
select * from #t

#22


为什么老是显示 無法解析 equal to 動作的定序衝突。
这个,我也感觉coleling
和WaterGG
语法等没有问题的,可是不知道为什么老是这样,我的是SQL2000server繁体的,
客户端是用SQL2005Studio连上去的,都是繁体版,服务器对字符大小写敏感.里面是真实的数据

#23


引用 21 楼 sukeman 的回复:
if object_id('tempdb.dbo.#T') is not null drop table #T
GO
create table #T(BOM_NO varchar(15),PRD_NO varchar(14),QTY int,WH_NO varchar(4),lg int)

declare @lg int
set @lg=0

insert #t select BO……


用RapidSQL连上去调试了,
     insert @t -------这个地方SQL显示断点错误:10:01:42.461 DBMS 192.168.3.4 -- Error:  無法解析 equal to 動作的定序衝突。(42000,446) Procedure(GetBom), Batch 2 Line 15
---------另外waterGG的在这里报错:
while exists(select 1 from #t a,TF_BOM b where a.PRD_NO+'->'=b.BOM_NO and a.lg=@lg) ---也是断点显示 無法解析 equal to 動作的定序衝突

--------------------





#24


该回复于2010-12-23 11:27:59被版主删除

#25


该回复于2010-12-23 14:02:27被版主删除

#26


晕,解决问题呢,你这是搞什么啊.

#27


难道没有解决的办法了吗?

#28


首先非常感谢上面的大哥,大姐关注,特别感谢上面的朋友出手相助,
请恕我无知,是不是

法解析 equal to 動作的定序衝突  是不是这个问题太简单了,而令你们也不说话了.还是什么原因呢?
请指定一下吗?