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"}]
我不认为您可以通过一次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)
您可以使用“JSON_MODIFY”函数并附加键来修改 JSON 对象,如下所示:
它适用于单个 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)