使用 JSON_MODIFY 将多个对象追加到现有数组中

Zar*_*rda 7 sql t-sql sql-server json

问题在于将新的 JSON 数组附加到现有的 JSON 数组:

假设我有以下 JSON 数组 [{"id": 1, "data": "One"}, {"id": 2, "data": "Two"}]

我如何[{"id": 3, "data": "Three"}, {"id": 4, "data": "Four"}]使用 附加到它JSON_MODIFY

更新列的结果值: [{"id": 1, "data": "One"}, {"id": 2, "data": "Two"}, {"id": 3, "data": "Three"}, {"id": 4, "data": "Four"}]

Zho*_*rov 5

我不认为您可以通过一次JSON_MODIFY()调用合并两个 JSON 数组,但以下语句(使用JSON_MODIFY())是一种可能的解决方案:

陈述:

DECLARE @json NVARCHAR(500)='[{"id": 1, "data": "One"}, {"id": 2, "data": "Two"}]'
DECLARE @new NVARCHAR(500)='[{"id": 3, "data": "Three"}, {"id": 4, "data": "Four"}]'

SELECT @json = JSON_MODIFY(
   @json,
   'append $',
   JSON_QUERY([value])
)
FROM OPENJSON(@new)

SELECT @json
Run Code Online (Sandbox Code Playgroud)

结果:

[{"id": 1, "data": "One"}, {"id": 2, "data": "Two"},{"id": 3, "data": "Three"},{"id": 4, "data": "Four"}]
Run Code Online (Sandbox Code Playgroud)


jai*_*444 1

您可以使用“JSON_MODIFY”函数并附加键来修改 JSON 对象,如下所示:

SQL-FIDDLE

它适用于单个 JSON 数组:

DECLARE @json1 NVARCHAR(500)='[{"id": 1, "data": "One"}, {"id": 2, "data": "Two"}]';
DECLARE @json2 NVARCHAR(500)='[{"id": 3, "data": "Three"}, {"id": 4, "data": "Four"}]';


SELECT t.id, t.[data]
FROM
(
    SELECT * FROM OPENJSON(@json1) WITH(id int,[data] NVARCHAR(MAX)) 
    UNION ALL
    SELECT * FROM OPENJSON(@json2) WITH(id int,[data] NVARCHAR(MAX))
) t
FOR JSON PATH;
Run Code Online (Sandbox Code Playgroud)

它适用于单个 JSON 哈希:

DECLARE @info NVARCHAR(500)='[{"id": 1, "data": "One"}, {"id": 2, "data": "Two"}]';

PRINT @info;

SET @info = JSON_MODIFY(@info, 'append $', JSON_QUERY('{"id": 3, "data": "Three"}'))
SET @info = JSON_MODIFY(@info, 'append $', JSON_QUERY('{"id": 4, "data": "Four"}'))

PRINT @info;
Run Code Online (Sandbox Code Playgroud)