sql - 在 SQL Server 2016 中向 json 字符串添加新值

标签 sql json sql-server

我想在不使用 Json_modify 函数的情况下将新值插入到随机 Json 字符串中。我正在使用 SQL Server 2016。

例如,假设我有一个像这样的 Json 字符串:

{ "a": { "b": "val"} }

现在我想将一个新对象添加到 Json 字符串中。添加值为 NEW 的对象 c 后,Json 字符串应如下所示:

{ "a": { "b": "val", "c": "NEW"} }

有没有办法在不使用 json_modify 的情况下执行类似的操作?

我不想将 Json 字符串保存到表中。之后我想要的只是一个 SQL Server 过程,它将一个 Json 对象添加到定义位置上的 Json 字符串中。

谢谢


我如何使用 JSON_MODIFY 做到这一点:

declare @jsonString nvarchar(4000) = '{"a": {"b":"val"} }'
, @jsonResult nvarchar(4000)
, @path nvarchar(128) = '$.a.c'
, @value nvarchar(128) = 'NEW'

set @jsonResult = JSON_MODIFY(@jsonString, @path, @value)
select @jsonResult

最佳答案

    DECLARE @json VARCHAR(MAX)='{ "a": { "b": "val"} }'

    --Collect values in tmp table
    SELECT * INTO #tbljson  FROM OPENJSON(@json,'$.a') WITH ( b VARCHAR(50))

    -- Add new column into tmp table
    ALTER TABLE #tbljson
    ADD c VARCHAR(10) NULL

    --Update value to new column
    UPDATE #tbljson SET c= 'New' WHERE b='val'

    -- get new Json 
    DECLARE @newJson VARCHAR(max)
    SET @newJson=(SELECT * FROM #tbljson FOR JSON PATH, INCLUDE_NULL_VALUES)


    -- Update it to original Json.
    SET @json= JSON_MODIFY(@json, '$.a',JSON_QUERY(@newJson))

    SELECT @json
    DROP TABLE #tbljson

这可能是我解决这个问题的方法。我会这样做,而不是字符串操作,如果 Json 集合稍大一点,那么我会这样做。这是比字符串操作更干净的方法。

关于sql - 在 SQL Server 2016 中向 json 字符串添加新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50084432/

相关文章:

sql - mysql 列太多?

php - 我怎样才能加入 CakePHP 中的最后一个条目?

mysql - 如何将字符串 'mm-yyyy'列转换为MYSQL中的时间戳?

javascript - 我如何在 gridster 中获取单个 widget(li) JSON?

asp.net - SQL Server 数据归档

sql - 如何强制 SQL Server 登录 nolock 提示

java - JSON 数据加密/解密或键值对

读取 Json 后 iOS PickerView 为空

c# - CultureInfo.InvariantCulture 和 DateTime to String 如何工作

sql-server - SQL Server 中拉丁字符的 SHA1 值与雪花数据库的 SHA1 不匹配