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
    
  • 相关阅读:
    HDU 5313 bitset优化背包
    bzoj 2595 斯坦纳树
    COJ 1287 求匹配串在模式串中出现的次数
    HDU 5381 The sum of gcd
    POJ 1739
    HDU 3377 插头dp
    HDU 1693 二进制表示的简单插头dp
    HDU 5353
    URAL 1519 基础插头DP
    UVA 10294 等价类计数
  • 原文地址:https://www.cnblogs.com/Candies/p/10081860.html
Copyright © 2011-2022 走看看