我想在不使用 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/