-- zx
create PROCEDURE getbomtree
@MaterialID INT --参数,父节点的id
AS
BEGIN -- 如果主BOM禁用,不显示树结构
IF NOT EXISTS( SELECT * FROM dbo.M_BD$$BomMain WHERE MaterialID=@MaterialID AND IsDisabled=1)
BEGIN
RETURN
END DECLARE @Levels int
CREATE TABLE #temp_BomDetail(
S_ID INT ,
S_PID INT
)
DECLARE @Tree TABLE
( uid int identity(1,1),
S_ID INT null,
S_PID int null,
SS_NAME varchar(200) NULL,
Levels INT
)
INSERT INTO #temp_BomDetail
SELECT BomDetail.MaterialID AS S_ID ,BomMain.MaterialID AS S_PID
FROM dbo.M_BD$$BomDetail AS BomDetail
LEFT JOIN dbo.M_BD$$BomMain AS BomMain ON BomDetail.BOMMainID=BomMain.uid --插入0,顶层节点
INSERT INTO @Tree(S_ID,S_PID,Levels)
SELECT MaterialID,0,0 FROM dbo.M_BD$$BomMain WHERE MaterialID=@MaterialID --插入1级节点
INSERT INTO @Tree(S_ID,S_PID,Levels)
SELECT S_ID ,S_PID,1
FROM #temp_BomDetail
WHERE S_PID=@MaterialID --插入2级以后节点,判断树的最后插入的节点是否还有子节点
SET @Levels=1
WHILE EXISTS( SELECT S_ID FROM #temp_BomDetail WHERE S_PID IN(SELECT S_ID FROM @Tree WHERE Levels=@Levels))
BEGIN
--树中的最后一级 S_ID 作为父级
INSERT @Tree(S_ID,S_PID,Levels)
SELECT S_ID,S_PID,@Levels+1 FROM #temp_BomDetail WHERE S_PID IN(SELECT S_ID FROM @Tree WHERE Levels=@Levels)
SET @Levels+=1;
END -- 循环结束,删除节点
DROP table #temp_BomDetail --更新物料名称
UPDATE @Tree SET SS_NAME=Name+' '+CodeNumber FROM @Tree t1
LEFT JOIN dbo.P_BD$$Material AS Material ON Material.uid=t1.S_ID --直接用 Material.uid=@tree.S_ID 会报错误,必须把@tree 重命名为 t1
SELECT * FROM @Tree END

  

实例1-gettree的更多相关文章

  1. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  2. Fancytree实例

    一.实例 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> ...

  3. js-静态、原型、实例属性

    本篇来说一下js中的属性: 1.静态属性 2.原型属性 3.实例属性 静态属性: function klass(){} var obj=new klass(); klass.count=0; klas ...

  4. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  5. EntityFramework Core 1.1是如何创建DbContext实例的呢?

    前言 上一篇我们简单讲述了在EF Core1.1中如何进行迁移,本文我们来讲讲EF Core1.1中那些不为人知的事,细抠细节,从我做起. 显式创建DbContext实例 通过带OnConfiguri ...

  6. redis集成到Springmvc中及使用实例

    redis是现在主流的缓存工具了,因为使用简单.高效且对服务器要求较小,用于大数据量下的缓存 spring也提供了对redis的支持: org.springframework.data.redis.c ...

  7. 流程开发Activiti 与SpringMVC整合实例

    流程(Activiti) 流程是完成一系列有序动作的概述.每一个节点动作的结果将对后面的具体操作步骤产生影响.信息化系统中流程的功能完全等同于纸上办公的层级审批,尤其在oa系统中各类电子流提现较为明显 ...

  8. UWP开发之Template10实践:本地文件与照相机文件操作的MVVM实例(图文付原代码)

    前面[UWP开发之Mvvmlight实践五:SuspensionManager中断挂起以及复原处理]章节已经提到过Template10,为了认识MvvmLight的区别特做了此实例. 原代码地址:ht ...

  9. echarts+php+mysql 绘图实例

    最近在学习php+mysql,因为之前画图表都是直接在echart的实例demo中修改数据,便想着两相结合练习一下,通过ajax调用后台数据画图表. 我使用的是echart3,相比较第二版,echar ...

  10. 【HanLP】HanLP中文自然语言处理工具实例演练

    HanLP中文自然语言处理工具实例演练 作者:白宁超 2016年11月25日13:45:13 摘要:HanLP是hankcs个人完成一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环 ...

随机推荐

  1. System.Json 使用注意

    在xamarin中对json字符串进行解析,使用System.Json时出现怪问题: json-string = { "ret" : "OK" } 使用如下代码 ...

  2. Git使用详细教程(一)

    很久不发博客,最近有兴趣想写点东西,但 Live Writer 不支持从Word复制图片,疯狂吐槽下 Git使用详细教程(一) Git使用详细教程(二) 该教程主要是Git与IntelliJ IDEA ...

  3. 传统IT企业与互联网企业的一点思考

    [注意前提]应当说,比较常用的管理策略并没有界线分明的优劣之分,只有适不适合企业的经营战略,团队文化,发展状况等. 之所以有传统IT企业与互联网企业的区别,主要的原因是两者所处的市场环境与经营思路造成 ...

  4. 搭建高可用的rabbitmq集群 + Mirror Queue + 使用C#驱动连接

    我们知道rabbitmq是一个专业的MQ产品,而且它也是一个严格遵守AMQP协议的玩意,但是要想骚,一定需要拿出高可用的东西出来,这不本篇就跟大家说 一下cluster的概念,rabbitmq是erl ...

  5. 企业号微信支付 公众号支付 H5调起支付API示例代码 JSSDK C# .NET

    先看效果 1.本文演示的是微信[企业号]的H5页面微信支付 2.本项目基于开源微信框架WeiXinMPSDK开发:https://github.com/JeffreySu/WeiXinMPSDK 感谢 ...

  6. Hadoop分布式系统的安装部署

    1.关于虚拟机的复制 新建一台虚拟机,系统为CentOS7,再克隆两台,组成一个三台机器的小集群.正常情况下一般需要五台机器(一个Name节点,一个SecondName节点,三个Data节点.) 此外 ...

  7. SQL分隔字符串

    创建函数: )) --@str:目标字符串 --@spliter:分隔符 RETURNS @tb TABLE(ch NVARCHAR(max)) AS BEGIN DECLARE @Num INT,@ ...

  8. war 文件打包技巧

    1.首先是工具比如Eclipse很方便了. 2.用winrar之类的工具,把web-info目录,及跟它同级的所有目录及文件,打包成 zip文件就行了,然后把扩展名改成war! 3 Jar命令: 假定 ...

  9. 记一次简单的SQL优化

    原来的sql是这样写的 SELECT d.ONSALE_BARCODE, d.ONSALE_NAME, c.ONSALE_ID, CAST( , ) ) AS CUSTOMARY_PRICE, CAS ...

  10. 《Note --- Unreal 4 --- B project --- Second UV issue》

    Second uv 可以通过editor来生成: 这部分内容都是在staticMeshEditor这个文件夹下面的代码里: 关于UI的相应机制,有个文件UICommandList.cpp例如我点击st ...