--改用这个函数 create function f_getmergbm() returns @re table(id nvarchar(20),mid nvarchar(4000),level int) as begin declare @level int set @level=1 insert into @re select PartsID,PartsID,@level from BCParts where PPartsID not in(select PartsID from BCParts) while @@rowcount>0 begin set @level=@level+1 insert into @re select a.PartsID,b.mid+','+a.PartsID,@level from BCParts a inner join (select id,mid from @re where level=@level) b on a.PPartsID=b.id end return end go--查询的时候用 select a.* from BCParts a inner join dbo.f_getmergbm() b on a.PartsID=b.id order by b.mid
举个例子,对于下面的数据: A |__A1 |__A2 |_A21 B |__B1第一种方法的描述为: id name pid 1 A 0 2 B 0 3 A1 1 4 A2 1 5 A21 4 6 B1 2第二种方法的描述为,假设编码规则为1-2-2: id name 1 A 2 B 101 A1 102 A2 10201 A21 201 B1如果要将A2及其所有的子移动到B1下面,第一种描述只需要将A2的pid改为6就行了. 而第二种方法,因为每级的编码长度都不相同,所以很难处理到.但在统计上,从我的《树形数据处理方案》的处理方法就可以看出,它实际上是通过实时生成类似方法2的编码来处理的。 所以当然第二种方案在统计上更有优势。
不知这样是不是索引列??
CREATE TABLE [dbo].[BCParts] (
[PartsID] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,--这是产品的主编号,也是主键!
[BCname] [nvarchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,--这是品名
[Specification] [nvarchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,--这是型号
[PPartsID] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,--这是父项
) ON [PRIMARY]
01001
02
02002这种结构。
create function f_getmergbm()
returns @re table(id nvarchar(20),mid nvarchar(4000),level int)
as
begin
declare @level int
set @level=1
insert into @re select PartsID,PartsID,@level from BCParts
where PPartsID not in(select PartsID from BCParts)
while @@rowcount>0
begin
set @level=@level+1
insert into @re select a.PartsID,b.mid+','+a.PartsID,@level
from BCParts a inner join (select id,mid from @re where level=@level) b
on a.PPartsID=b.id
end
return
end
go--查询的时候用
select a.* from BCParts a inner join dbo.f_getmergbm() b on a.PartsID=b.id order by b.mid
A
|__A1
|__A2
|_A21
B
|__B1第一种方法的描述为:
id name pid
1 A 0
2 B 0
3 A1 1
4 A2 1
5 A21 4
6 B1 2第二种方法的描述为,假设编码规则为1-2-2:
id name
1 A
2 B
101 A1
102 A2
10201 A21
201 B1如果要将A2及其所有的子移动到B1下面,第一种描述只需要将A2的pid改为6就行了.
而第二种方法,因为每级的编码长度都不相同,所以很难处理到.但在统计上,从我的《树形数据处理方案》的处理方法就可以看出,它实际上是通过实时生成类似方法2的编码来处理的。
所以当然第二种方案在统计上更有优势。