用SQL将JSON数据输出表值数据
存储过程代码
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数据输出表值数据的更多相关文章
- json与xml数据输出类
class Response { /** * 按json方式输出通信数据 * @param integer $code 状态码 * @param string $message 提示信息 * @par ...
- KETTLE——(三)数据输出
数据输出和数据输入基本差不多,KETTLE本身支持的数据输出方式也特别多,还是以数据库输出为例. 打开表输出的界面,简单介绍一下其功能: 就这个界面,如果不勾选[指定数据库字段],KETTLE ...
- xml和json格式输出
<?php class Response{ const JSON ='json'; /* * 按综合方式输出通信数据 * @param integer $ ...
- MS SQL读取JSON数据
前面有一篇<在SQL中直接把查询结果转换为JSON数据>https://www.cnblogs.com/insus/p/10905566.html,是把table转换为json. 现反过来 ...
- jquery: json树组数据输出到表格Dom树的处理方法
项目背景 项目中需要把表格重排显示 处理方法 思路主要是用历遍Json数组把json数据一个个append到5个表格里,还要给每个单元格绑定个单击弹出自定义对话框,表格分了单双行,第一行最后还要改ro ...
- jQuery操作列表数据转成Json再输出为html dom树
jQuery 把列表数据转成Json再输出为如下 dom树 <div id="menu" class="lv1"> <ul class=&qu ...
- springmvc: 普通list数据输出json
springmvc: 普通list数据输出json 加入json依赖 <dependency> <groupId>com.fasterxml.jackson.core</ ...
- python中json格式数据输出实现方式
python中json格式数据输出实现方式 主要使用json模块,直接导入import json即可. 小例子如下: #coding=UTF-8 import json info={} info[&q ...
- hive 将hive表数据查询出来转为json对象和json数组输出
一.将hive表数据查询出来转为json对象输出 1.将查询出来的数据转为一行一行,并指定分割符的数据 2.使用UDF函数,将每一行数据作为string传入UDF函数中转换为json再返回 1.准备数 ...
随机推荐
- Oracle-10:分析函数
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 分析函数: 分析函数,可以修改排序的规则!!!!!!!!!!!!!!!!!!!!!!!! 首先把数据库脚本给放 ...
- 好代码是管出来的——使用Git来管理源代码
软件开发过程中一个重要的产出就是代码,软件的编码过程一般是由一个团队共同完成,它是一个并行活动,为了保证代码在多人开发中能够顺利完成,我们需要使用代码版本控制工具来对代码进行统一存储,并追踪每一份代码 ...
- 神奇的AutoMapper
AutoMapper3.3.1自动转换string to DateTime时候报错: AutoMapper.AutoMapperMappingExceptionMissing type map con ...
- Spring mvc 原理浅析
2.2. 数据的绑定 前面说过了,SpringMVC是方法级的映射,那么Spring是如何处理方法签名的,又是如何将表单数据绑定到方法参数中的?下面我们就来讨论这个问题.2.2.1. 处理方法签名 首 ...
- go语言 nsq源码解读三 nsqlookupd源码nsqlookupd.go
从本节开始,将逐步阅读nsq各模块的代码. 读一份代码,我的思路一般是: 1.了解用法,知道了怎么使用,对理解代码有宏观上有很大帮助. 2.了解各大模块的功能特点,同时再想想,如果让自己来实现这些模块 ...
- bzoj 2242 [SDOI2011]计算器 快速幂+扩展欧几里得+BSGS
1:快速幂 2:exgcd 3:exbsgs,题里说是素数,但我打的普通bsgs就wa,exbsgs就A了...... (map就是慢)..... #include<cstdio> # ...
- 【树形dp】Bzoj3391 [Usaco2004 Dec]Tree Cutting网络破坏
Description 约翰意识到贝茜建设网络花费了他巨额的经费,就把她解雇了.贝茜很愤怒,打算狠狠报 复.她打算破坏刚建成的约翰的网络. 约翰的网络是树形的,连接着N(1≤N≤1000 ...
- [ZLXOI2015]殉国 数论 扩展欧几里得
题目大意:已知a,b,c,求满足ax+by=c (x>=0,y>=0)的(x+y)最大值与最小值与解的个数. 直接exgcd,求出x,y分别为最小正整数的解,然后一算就出来啦 #inclu ...
- python 将os.getcwd()获取路径中的\替换成\\
通过os.getcwd()获取的路径为:D:\Auto\test\mobule,实际需要修改为:D://Auto//test//mobule 代码实现如下: import osb = os.getcw ...
- 关于table表格 td里内容较多换行的处理方法
最近在用table的时候由于td内容较多默认换行了,很不美观.于是找到处理方法: 在声明table的时候添加一个样式: <table id="tbOffice" data-r ...