-- 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. JDBC数据库访问操作的动态监测 之 Log4JDBC

    log4jdbc是一个JDBC驱动器,能够记录SQL日志和SQL执行时间等信息.log4jdbc使用SLF4J(Simple Logging Facade)作为日志系统. 特性: 1.支持JDBC3和 ...

  2. Scala 变长参数

    如果Scala定义变长参数 def sum(i Int*), 那么调用sum时,可以直接输入sum(1,2,3,4,5) 但是不可以sum(1 to 5) 必须要将1 to 5 强制为seq sum( ...

  3. mac下查看.mobileprovision文件及钥匙串中证书.cer文件

    mac下查看.mobileprovision文件及钥匙串中证书.cer文件 一. mobileprovision文件查看 xxx.mobileprovision是ios开发中的设备描述文件,里面有证书 ...

  4. 【代码笔记】iOS-字符串的分割

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...

  5. 吐个槽:bose的售后真心差劲!愧对这个顶级音响产品!

    400电话只提供周一到周五(中午有1个小时非服务时间),打进去就不厌其烦地告知你服务时间,你多按几个0,对方就直接把电话给你挂了!即使耐心等待它啰嗦完,哪怕只有0个人等待或1个人等待,你也是接不进去的 ...

  6. ORACLE推导参数Derived Parameter介绍

    Oracle的推导参数(Derived Parameters)其实是初始化参数的一种.推导参数值通常来自于其它参数的运算,依赖其它参数计算得出.官方文档关于推导参数(Derived Parameter ...

  7. Java 修饰符

    Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class classNam ...

  8. SQL 语法总结

    学了一个月的java,开始有入门的感觉.这段时间接触到了java的JDBC, 发现学习这部分的内容还是要有SQL的基础,于是花费了几天时间学习了一下SQL语法,并将其总结于下. 选择数据 SELECT ...

  9. Linux 入门之修改主机名

    vi /etc/hosts 修改 local.domain 为自己的主机名比如 compute

  10. 虚拟机Linux----Ubuntu1404----root登录设置

    说明:在安装玩1404这个版本的ubuntu后,默认也是看不到root登录的,也需要修改配置文件,但是修改的文件和1204不太一样. 1.shell窗口,普通用户首先登录,切换到root用户下: su ...