存储过程代码

 CREATE PROC Proc_JsonConvertTable(@JSON VARCHAR(MAX))
AS
--JSON测试数据
--SET @JSON='[{name:张三,age:18,hobby:打篮球},{name:李四,age:30,hobby:唱歌},{name:王五,age:33,hobby:跳舞}]';
--JSON测试数据处理
SET @JSON=REPLACE(@JSON,'[','');
SET @JSON=REPLACE(@JSON,']','');
SET @JSON=REPLACE(@JSON,'},{','}-*{');
DECLARE @ColName VARCHAR(15),
@ColName_CN VARCHAR(15),
@Value VARCHAR(100); --取列名
SELECT TOP 1
@Value=Value
FROM dbo.SplitString(@JSON,'-*',1);
DECLARE @Value2 VARCHAR(100);
SET @Value2=@Value;
SET @Value2=REPLACE(@Value2,':',',');
SET @Value2=REPLACE(@Value2,'"','');
SET @Value2=REPLACE(@Value2,'{','');
SET @Value2=REPLACE(@Value2,'}','');
DECLARE cr1 CURSOR
FOR
SELECT Value
FROM dbo.SplitString(@Value2,',',1);
OPEN cr1;
DECLARE @col VARCHAR(50),
@createSQL VARCHAR(500);
--拼接创建临时表的SQL
SET @createSQL='CREATE TABLE #TABLE (';
FETCH NEXT FROM cr1 INTO @col; DECLARE @forindex INT;
SET @forindex=2;
WHILE @@FETCH_STATUS=0
BEGIN
IF @forindex%2=0
BEGIN
SET @createSQL=@createSQL+@col+' VARCHAR(50) NOT NULL,';
SET @JSON=REPLACE(@JSON,'"','');
SET @JSON=CONVERT(VARCHAR(500),REPLACE(@JSON,':','ACC'));
SET @JSON=REPLACE(@JSON,@col+'ACC','');
END;
SET @forindex=@forindex+1;
FETCH NEXT FROM cr1 INTO @col; END;
CLOSE cr1;
DEALLOCATE cr1;
SET @createSQL=SUBSTRING(@createSQL,0,LEN(@createSQL));
SET @createSQL=@createSQL+');';
PRINT @createSQL; --处理JSON数据,并将数据插入到临时表
DECLARE cr CURSOR
FOR
SELECT Value
FROM dbo.SplitString(@JSON,'-*',1);
OPEN cr;
FETCH NEXT FROM cr INTO @Value; WHILE @@FETCH_STATUS=0
BEGIN
SET @Value=REPLACE(@Value,'{','');
SET @Value=REPLACE(@Value,'}','');
SET @Value=REPLACE(@Value,'"',''); PRINT @Value;
SET @col=(SELECT ''''+Value+''''+','
FROM SplitString(@Value,',',1)
FOR XML PATH(''));
SELECT @col=SUBSTRING(@col,0,LEN(@col));
PRINT @col;
SET @createSQL=@createSQL+'INSERT INTO #TABLE SELECT '+@col+';';
FETCH NEXT FROM cr INTO @Value;
END;
SET @createSQL=@createSQL+'SELECT * FROM #TABLE;';
PRINT @createSQL;
CLOSE cr;
DEALLOCATE cr; --执行SQL,并输出结果
EXEC(@createSQL);

测试代码

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

测试结果

  

用SQL将JSON数据输出表值数据的更多相关文章

  1. json与xml数据输出类

    class Response { /** * 按json方式输出通信数据 * @param integer $code 状态码 * @param string $message 提示信息 * @par ...

  2. KETTLE——(三)数据输出

    数据输出和数据输入基本差不多,KETTLE本身支持的数据输出方式也特别多,还是以数据库输出为例. ​ 打开表输出的界面,简单介绍一下其功能: ​ 就这个界面,如果不勾选[指定数据库字段],KETTLE ...

  3. xml和json格式输出

    <?php   class Response{     const JSON ='json';       /*     * 按综合方式输出通信数据     * @param integer $ ...

  4. MS SQL读取JSON数据

    前面有一篇<在SQL中直接把查询结果转换为JSON数据>https://www.cnblogs.com/insus/p/10905566.html,是把table转换为json. 现反过来 ...

  5. jquery: json树组数据输出到表格Dom树的处理方法

    项目背景 项目中需要把表格重排显示 处理方法 思路主要是用历遍Json数组把json数据一个个append到5个表格里,还要给每个单元格绑定个单击弹出自定义对话框,表格分了单双行,第一行最后还要改ro ...

  6. jQuery操作列表数据转成Json再输出为html dom树

    jQuery 把列表数据转成Json再输出为如下 dom树 <div id="menu" class="lv1"> <ul class=&qu ...

  7. springmvc: 普通list数据输出json

    springmvc: 普通list数据输出json 加入json依赖 <dependency> <groupId>com.fasterxml.jackson.core</ ...

  8. python中json格式数据输出实现方式

    python中json格式数据输出实现方式 主要使用json模块,直接导入import json即可. 小例子如下: #coding=UTF-8 import json info={} info[&q ...

  9. hive 将hive表数据查询出来转为json对象和json数组输出

    一.将hive表数据查询出来转为json对象输出 1.将查询出来的数据转为一行一行,并指定分割符的数据 2.使用UDF函数,将每一行数据作为string传入UDF函数中转换为json再返回 1.准备数 ...

随机推荐

  1. Unity文档阅读 第三章 依赖注入与Unity

    Introduction 简介In previous chapters, you saw some of the reasons to use dependency injection and lea ...

  2. WireShark基本抓包数据分析

    WireShark抓包数据分析: 1.TCP报文格式 •  源端口.目的端口:16位长.标识出远端和本地的端口号. •  顺序号:32位长.表明了发送的数据报的顺序. •  确认号:32位长.希望收到 ...

  3. TensorFlow 常用函数汇总

    本文介绍了tensorflow的常用函数,源自网上整理. TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU.一般你不需要显式指定使用 CPU ...

  4. Unable to find remote helper for 'https'

    出现这个报错,说明git目前的状态是正常的,要么没装好,要么自己解决压缩安装导致没有权限 第三次情况是,使用yum install git 重新安装后,仍然报错,是因为环境变量中GIT_HOM配置的仍 ...

  5. WebSocket和Socket

    WebSocket和Socket tags:WebSocket和Socket 引言:好多朋友想知道WebSocket和Socket的联系和区别,下面应该就是你们想要的 先来一张之前收集的图,我看到这张 ...

  6. Eclipse 4.2 安装Java反编译插件

    在eclipse下安装反编译插件可以直接查看 .class 文件对应的java源码. 反编译插件有 jdeclipse 和 jadeclipse. (1) jdeclipse http://www.d ...

  7. Mac下安装git

    gti下载地址 https://git-scm.com/downloads 一步一步来就完事了.安装完以后执行 git version 查看是否更新到了该版本

  8. bzoj5249 [2018多省省队联测]IIIDX

    转化一下问题变成给定一棵树,一个序列,求父亲的权值小于子树的最大方案. 直接贪心会在有重复权值时出现错误,我们考虑用线段树优化贪心. 将序列从小到大排序,线段树上每个点记录他和他右边当前还可用的权值, ...

  9. 【Floyd】BZOJ1491: [NOI2007]社交网络

    Description   Solution n<=100自然联想Floyd 设两个数组d[n][n]存最短距离,t[n][n]存最短路径条数 更新d的时候顺便更新t,乘法原理 if(d[i][ ...

  10. BZOJ_2303_[Apio2011]方格染色 _并查集

    BZOJ_2303_[Apio2011]方格染色 _并查集 Description Sam和他的妹妹Sara有一个包含n × m个方格的 表格.她们想要将其的每个方格都染成红色或蓝色. 出于个人喜好, ...