zoukankan      html  css  js  c++  java
  • [原创]存储过程里面的递归

    表结构

    CREATE TABLE #temptable
        (
          [id] BIGINT ,
          [dataKey] NVARCHAR(255) ,
          [dataValue] NVARCHAR(MAX) ,
          [displayOrder] INT ,
          [dataTypeDesc] NVARCHAR(100) ,
          [pid] BIGINT ,
          [Remark] NVARCHAR(256)
        );
    

    测试数据

    
    INSERT INTO #temptable
    VALUES
    ( 1, N'10', N'代付款', 0, N'billStatus', 0, N'账单状态' ), 
    ( 2, N'20', N'付款中', 0, N'billStatus', 1, N'账单状态' ), 
    ( 3, N'30', N'待确认', 0, N'billStatus', 2, N'账单状态' ), 
    ( 4, N'40', N'已付款', 0, N'billStatus', 3, N'账单状态' ), 
    ( 5, N'50', N'逾期', 0, N'billStatus', 4, N'账单状态' ), 
    ( 6, N'10', N'任务补充费用', 0, N'supplementFeeType', 0, N'费用类型' ), 
    ( 7, N'20', N'服务违规罚款', 0, N'supplementFeeType', 6, N'费用类型' ), 
    ( 8, N'30', N'优质服务奖励', 0, N'supplementFeeType', 7, N'费用类型' ), 
    ( 9, N'1', N'个人支付', 0, N'paySource', 0, N'支付方式' ), 
    ( 10, N'2', N'企业支付', 0, N'paySource', 9, N'支付方式' )
    

    存储过程

    # 测试参数
    DECLARE @DataTypeDesc NVARCHAR(MAX) = 'billStatus,contractType';
      DROP TABLE IF EXISTS #DataType_tmp;
      DROP TABLE IF EXISTS #Temp;
    
    CREATE TABLE #DataType_tmp
        (
          dataTypeDesc NVARCHAR(100)
        );
    INSERT  INTO #DataType_tmp
            SELECT DISTINCT
                    value
            FROM    STRING_SPLIT(@DataTypeDesc, ',');
    
    CREATE TABLE #Temp ( id BIGINT, pid BIGINT );
    
    
    	IF EXISTS(SELECT 1 FROM #DataType_tmp)
    	BEGIN
    
    	-- 递归的精髓所在
    	 WITH Cte
        AS (
    SELECT [id]
          ,[pid]
      FROM [#temptable] p
      JOIN #DataType_tmp tmp ON p.dataTypeDesc =  tmp.dataTypeDesc
      WHERE p.pid = 0
    
        UNION ALL
            SELECT  T.[id]
          ,T.[pid]
            FROM Cte
                INNER JOIN [#temptable] T
                    ON T.pid = Cte.id
    
      )
      INSERT INTO #Temp
      (id, pid)
      SELECT id, pid FROM Cte
    
      SELECT te.* FROM #Temp t JOIN [#temptable] te ON t.id = te.id;
      
      DROP TABLE #DataType_tmp;
      DROP TABLE #Temp;
      END
    
  • 相关阅读:
    Metabase研究 开源的数据报表
    Redis配置不当致使root被提权漏洞
    一个程序员被骗去养猪
    调度器简介,以及Linux的调度策略
    Linux的内存分页管理
    在地铁11号线上写书
    为什么说“概率”带来一场现代革命?
    快速学习Bash
    用树莓派玩转蓝牙
    树莓派的GPIO编程
  • 原文地址:https://www.cnblogs.com/Candies/p/10081860.html
Copyright © 2011-2022 走看看