MsSql解析JSON为表结构体

--=============  存储过程语句  =============--

/*

解析一层jaon数组,转为表形式输出

*/

ALTER PROCEDURE [dbo].[sp_getJSONFields]

@Json VARCHAR(MAX)

AS

BEGIN

SELECT @Json=REPLACE(@Json,'[','')

SELECT @Json=REPLACE(@Json,']','')

SET @Json = @Json+ ','

SELECT @Json=REPLACE(@Json,'{','')

SELECT @Json=REPLACE(@Json,'},',',;')

DECLARE @temp VARCHAR(1000)

DECLARE @temp_str VARCHAR(1000)

DECLARE @objName VARCHAR(300)

DECLARE @objValue VARCHAR(300)

DECLARE @fieldSql VARCHAR(MAX)

DECLARE @temp_ziduan VARCHAR(1000)

SET @fieldSql = ''

--大循环,循环对象数据中的对象

WHILE LEN(@Json)>0

BEGIN

SET @fieldSql = @fieldSql+ ' select '

--获取前面的一个对象

SELECT @temp=SUBSTRING(@Json,0,CHARINDEX(';',@Json,0))

SET @temp_str=@temp

--循环获取前面对象的字段

WHILE LEN(@temp)>0

BEGIN

SELECT @temp_ziduan = SUBSTRING(@temp,0,CHARINDEX(',',@temp,0))

SELECT @temp=RIGHT(@temp,LEN(@temp)-LEN(@temp_ziduan)-1)

SET @objName =left(@temp_ziduan,CHARINDEX(':',@temp_ziduan,0)-1)

SET @objValue =right(@temp_ziduan,len(@temp_ziduan)-CHARINDEX(':',@temp_ziduan,0))

SET @fieldSql=@fieldSql+REPLACE(@objValue,'"','''')+' as '+REPLACE(@objName,'"','')+','

END

SET @fieldSql = LEFT(@fieldSql,LEN(@fieldSql)-1)+' union all '

SELECT @Json=RIGHT(@Json,LEN(@Json)-LEN(@temp_str)-1)

END

SET @fieldSql=LEFT(@fieldSql,LEN(@fieldSql)-10)

EXEC (@fieldSql)

END

--=============  调用测试  =============--

传入JsonArr:

传入JsonObject:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是SQL数据库: SQL是Structured Query Language(结构化查询语言)的缩写。SQL是...
    西贝巴巴阅读 1,850评论 0 10
  • 姓名:于川皓 学号:16140210089 转载自:https://baike.baidu.com/item/sq...
    道无涯_cc76阅读 1,973评论 0 2
  • 50个常用的sql语句Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname...
    哈哈海阅读 1,250评论 0 7
  • 基础 创建数据库 CREATE DATABASE database-name 删除数据库 drop databas...
    RoronoaZoro丶阅读 419评论 0 0
  • 如果一个社会认为树木结出苹果才是成功的,那么将来所有的树木都会朝着结出苹果而努力。 〉〉01 微信朋友圈曾经刷过一...
    an书叔阅读 555评论 1 5