本帖最后由 跷跷板 于 2022-8-11 13:59 编辑
树形控件,是一个展现不同数据层次或层级的控件, 但树形控件在加载时加载不出来。 数据表中总行数:12400行;
设计时是这样的(下图),
数据表的样子是这样的: 第2列是关联TimeA的ID,这里是整数。 WBSNO,UP是本层与上层的对应关系列。
因为数据都是双位数, 取长度/2 = X , 这个X就是某树形节点的等级。 这个等级在未来查询时使用。
测试经过:
一、 WBSNO,UP 2列无论是数值型,还是文本型,都加载不出树形数据; 主要极有可能是树形是先加载全部数据,再其基础上进行的条件过滤。
所以在加载的时候数据量太大, 加载不出。
为什么这么说呢, 看我第2步的验证。
二 、 做一个与 BBB结构一样的空表Shuxing( 全名:b_ProdTimeB_Shuxing),然后每次查询的时候,都重要通过SQL过程,将查询的结果插入到Shuxing中。
再通过树型加载Shuxing表。 这样的表数据格式与(一)是一样的, 但数据量只有400多行。
结果: 非常快
- ALTER proc [dbo].[Proc_b_ProdTimeB] @ProdTimeA_ID nvarchar(30)
- DELETE FROM b_ProdTimeB_Shuxing
复制代码
三、 不用我的WBSNO,UP做上级的关联,直接用表的自身的ID, 因为表自身的ID关键字,效率应该更高。
结果:非常快
涉及到树形的上级, 尽量用其自己的ID,这样最简单,效率最高。但其层级自动判断难。需要程序自己将全部的结构规则建好,用户只用就可以。
最终, 因为我的使用场景(要不断向上级汇总mins) ,我目前选择用第二种。 是不是第三种也行,还在校验中,有了新结果再完善此文档 。
- ALTER PROC [dbo].[UPDATE_WBS_SUMTIME]
- @AID INT
- AS
- declare @c int
- set @c=5
- --set @AID=8
- while @c>=1
- begin
- update b_ProdTimeB
- set StandMins=B.Smins
- from b_ProdTimeB A
- inner join
- (
- select up, SUM(standmins) Smins
- from b_ProdTimeB
- where len(wbsno)=@c AND b_ProdTimeA_ID=@AID ---如果这个 len(wbsno)=@c 可不用,就可以用方式三了吧。??
- GROUP BY up
- ) as B on a.WBSno=b.UP
- inner join b_prodtimeA C on c.ID=a.b_ProdTimeA_ID
- where len(a.wbsno)=@c-1 and C.ID=@AID
- SET @c-=1
- end
复制代码
|