SQL存储实现将JSON自动转化成SQL数据列

CREATE PROCEDURE sp_GetJsonFields
    (
       @Json VARCHAR(MAX)
    )
    
    AS
    BEGIN
    SELECT @Json=REPLACE(@Json,'{','')
    SELECT @Json=REPLACE(@Json,'}',',')
    DECLARE @temp VARCHAR(MAX)
    DECLARE @objName VARCHAR(4000)
    DECLARE @objValue VARCHAR(4000)
    DECLARE @fieldSql VARCHAR(MAX)
    SET @fieldSql='select '

    WHILE LEN(@Json)>0 --LEN 函数返回文本字段中值的长度
    BEGIN
    --通过CHARINDEX如果能够找到对应的字符串,则返回该字符串位置,否则返回0
    SELECT @temp=SUBSTRING(@Json,0,CHARINDEX(',',@Json,0))--截取到该逗号的位置字符串
    --
    SELECT @Json=RIGHT(@Json,LEN(@Json)-LEN(@temp)-1)--再获取右边字符串信息

    ---取对象字段名称信息
    set @objName =left(@temp,CHARINDEX(':',@temp,0)-1)
    --取对象字段名称对应的值
    set @objValue =right(@temp,len(@temp)-CHARINDEX(':',@temp,0))
    
    --PRINT  @objName+'='+ @objValue+';'
    --替换""字符为''
    set @fieldSql=@fieldSql+REPLACE(@objValue,'"','''')+' as '+REPLACE(@objName,'"','')+','
    END
    SET @fieldSql=LEFT(@fieldSql,LEN(@fieldSql)-1)
    --EXEC sp_executesql @fieldSql
    EXEC (@fieldSql)
    END
    GO

    EXEC sp_GetJsonFields @json=
    '{"CarGid":"835A38CC-3D19-4123-AB7A-9AFC9704818A","CarQty":1,
    "CarPrice":300000.00,"ShopGid":"835A38CC-6D19-4323-AB7A-6AFC9704765A","ShopName":"全新幻影新能源汽车直售店",
       "CarName":"幻影系能源SL00",
       "CarImage":"http:\/\/Carimg.Soft.com\/images9f024a01993cc68f89aab295"}'

 

抛砖引玉 引荐过来的东西 注意细节方面 就是 存贮的字段值中的json数据中 其它字段值的中间不能有逗号存在不然会引起 查值异常

譬如:"CarName":"幻影系能源SL00", 不能存在值"CarName":"幻影系能源SL00,全新一代特别奉献版,越野系列",

生成数据:

 

posted @ 2019-11-25 16:59  蜜雪粮液  阅读(1488)  评论(0编辑  收藏  举报