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);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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)