• sql 递归


    递归速度较慢,建议建立索引,如下:

    Create index 索引名【表名_字段名】on 表名(字段1,字段2...)

    Drop index 表名.索引名

    --根据子节点,得到父节点
    CREATE PROCEDURE ProcGetRootID
        @PatentID bigInt
    AS
    DECLARE @ID bigInt
    BEGIN
        CREATE TABLE #TEMP(PatentID bigInt,ID bigInt)
        WHILE 1 = 1
        BEGIN
            SELECT @ID = ID FROM Table WHERE @PatentID = PatentID
               IF @ID = 0 --结束条件,根据自己的业务写
               BEGIN 
                   INSERT INTO #TEMP VALUES (@PatentID,@ID)
                   BREAK;
               END
            SET  @PatentID = @ID
        END
        SELECT PatentID,ID FROM #TEMP
    END


    /***
    获取父节点下的所有子节点
    父ID:@FormCode
    子ID:OrigOrder
    注意:这个数据量大的时候更慢,建立索引为上策

    根据根订单Id获得所有有售后服务的订单id,即此订单有受理单
    */
    ALTER  PROCEDURE [dbo].[ProcGetAllFormCode]
     @FormCode bigInt
    AS
    BEGIN

     With RootNodeCTE(FormCode,OrigOrder)   
     As   
     (   
     Select FormCode,OrigOrder From OrderForm Where OrigOrder In (@FormCode)   
     Union All   
     Select OrderForm.FormCode,OrderForm.OrigOrder From RootNodeCTE   
     Inner Join OrderForm  
     On RootNodeCTE.FormCode = OrderForm.OrigOrder   
     )
     --把根节点包含进来
     SELECT FormCode,OrigOrder  FROM OrderForm WHERE FormCode=@FormCode
     UNION ALL
     Select * From RootNodeCTE 
    END

     调用方法

    ProcGetAllFormCode 参数

    如下 ProcGetAllFormCode 112587869

  • 相关阅读:
    [leetcode] Copy List with Random Pointer
    [leetcode] Single Number II
    团队项目NABCD模型的需求分析
    团队项目的分工及绩效评估方法
    软件工程结对作业实验报告
    Java jdbc链接 mySQL 写的crud
    从高版本JDK换成低版本JDK报错Unsupported major.minor version 52.0的解决方案
    红黑树简介
    再学HTML之一
    Java script 的dom编程
  • 原文地址:https://www.cnblogs.com/puke/p/1991249.html
Copyright © 2020-2023  润新知