隐藏页面特效

用SQL将JSON数据输出表值数据

 

1|0存储过程代码


1 CREATE PROC Proc_JsonConvertTable(@JSON VARCHAR(MAX)) 2 AS 3 --JSON测试数据 4 --SET @JSON='[{name:张三,age:18,hobby:打篮球},{name:李四,age:30,hobby:唱歌},{name:王五,age:33,hobby:跳舞}]'; 5 --JSON测试数据处理 6 SET @JSON=REPLACE(@JSON,'[',''); 7 SET @JSON=REPLACE(@JSON,']',''); 8 SET @JSON=REPLACE(@JSON,'},{','}-*{'); 9 DECLARE @ColName VARCHAR(15), 10 @ColName_CN VARCHAR(15), 11 @Value VARCHAR(100); 12 13 --取列名 14 SELECT TOP 1 15 @Value=Value 16 FROM dbo.SplitString(@JSON,'-*',1); 17 DECLARE @Value2 VARCHAR(100); 18 SET @Value2=@Value; 19 SET @Value2=REPLACE(@Value2,':',','); 20 SET @Value2=REPLACE(@Value2,'"',''); 21 SET @Value2=REPLACE(@Value2,'{',''); 22 SET @Value2=REPLACE(@Value2,'}',''); 23 DECLARE cr1 CURSOR 24 FOR 25 SELECT Value 26 FROM dbo.SplitString(@Value2,',',1); 27 OPEN cr1; 28 DECLARE @col VARCHAR(50), 29 @createSQL VARCHAR(500); 30 --拼接创建临时表的SQL 31 SET @createSQL='CREATE TABLE #TABLE ('; 32 FETCH NEXT FROM cr1 INTO @col; 33 34 DECLARE @forindex INT; 35 SET @forindex=2; 36 WHILE @@FETCH_STATUS=0 37 BEGIN 38 IF @forindex%2=0 39 BEGIN 40 SET @createSQL=@createSQL+@col+' VARCHAR(50) NOT NULL,'; 41 SET @JSON=REPLACE(@JSON,'"',''); 42 SET @JSON=CONVERT(VARCHAR(500),REPLACE(@JSON,':','ACC')); 43 SET @JSON=REPLACE(@JSON,@col+'ACC',''); 44 END; 45 SET @forindex=@forindex+1; 46 FETCH NEXT FROM cr1 INTO @col; 47 48 END; 49 CLOSE cr1; 50 DEALLOCATE cr1; 51 SET @createSQL=SUBSTRING(@createSQL,0,LEN(@createSQL)); 52 SET @createSQL=@createSQL+');'; 53 PRINT @createSQL; 54 55 56 --处理JSON数据,并将数据插入到临时表 57 DECLARE cr CURSOR 58 FOR 59 SELECT Value 60 FROM dbo.SplitString(@JSON,'-*',1); 61 OPEN cr; 62 FETCH NEXT FROM cr INTO @Value; 63 64 WHILE @@FETCH_STATUS=0 65 BEGIN 66 SET @Value=REPLACE(@Value,'{',''); 67 SET @Value=REPLACE(@Value,'}',''); 68 SET @Value=REPLACE(@Value,'"',''); 69 70 PRINT @Value; 71 SET @col=(SELECT ''''+Value+''''+',' 72 FROM SplitString(@Value,',',1) 73 FOR XML PATH('')); 74 SELECT @col=SUBSTRING(@col,0,LEN(@col)); 75 PRINT @col; 76 SET @createSQL=@createSQL+'INSERT INTO #TABLE SELECT '+@col+';'; 77 FETCH NEXT FROM cr INTO @Value; 78 END; 79 SET @createSQL=@createSQL+'SELECT * FROM #TABLE;'; 80 PRINT @createSQL; 81 CLOSE cr; 82 DEALLOCATE cr; 83 84 --执行SQL,并输出结果 85 EXEC(@createSQL);

2|0测试代码


EXEC Proc_JsonConvertTable @JSON='[{name:蔡徐坤,age:18,hobby:唱、跳、Rap、篮球},{name:李四,age:30,hobby:唱歌},{name:王五,age:33,hobby:跳舞}]'

 

3|0测试结果


 

 

 

  


__EOF__

本文作者DaiWK
本文链接https://www.cnblogs.com/daiwk/p/10791960.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   DaiWK  阅读(1277)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示