博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[原创]存储过程里面的递归
阅读量:5886 次
发布时间:2019-06-19

本文共 1757 字,大约阅读时间需要 5 分钟。

表结构

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

测试数据

INSERT INTO #temptableVALUES( 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

转载于:https://www.cnblogs.com/Candies/p/10081860.html

你可能感兴趣的文章
基于busybox搭建功能完善的小型linux(一)
查看>>
【转】在控制台、WinForm项目中的嵌入mdf文件的烦恼
查看>>
android The project target (Android 2.3.3) was not properly loaded
查看>>
【转】EDK简单使用流程(3)
查看>>
[python] 伪私有属性,防止变量名冲突
查看>>
loj#2538. 「PKUWC2018」Slay the Spire
查看>>
在jsp中嵌入javascript代码执行对html的影响方式
查看>>
redhat安装opencv
查看>>
十进制与其他进制转换
查看>>
web端测试小知识
查看>>
8.30 牛客OI赛制测试赛1 F题 子序列
查看>>
.NET中<asp:MultiView>选项卡控件的用法
查看>>
为什么用bower 安装bootstrap而不用npm来安装?
查看>>
通过游戏来学习CSS的Flex布局
查看>>
Firefly加入OPEN AI LAB生态计划,推出AI开源主板
查看>>
递归函数实现方法
查看>>
[转]Windows7 64bit下配置Apache+PHP+MySQL
查看>>
CentOS6.5 下在Nginx中添加SSL证书以支持HTTPS协议访问
查看>>
给trac的ticket添加提交时字段验证
查看>>
nodejs安装-配置
查看>>