Arrays 如何按属性id合并两个json数组(SQL Server)

Arrays 如何按属性id合并两个json数组(SQL Server),arrays,json,sql-server,join,Arrays,Json,Sql Server,Join,我有两列json,我想在id上加入到一个select中 样本数据 | a | b | +------------------------------------------------+-------------------------------------+ | [{id: 1, name: "Alice"},{id

我有两列json,我想在id上加入到一个select中

样本数据

| a                                              | b                                   |
+------------------------------------------------+-------------------------------------+
| [{id: 1, name: "Alice"},{id:2, name: "Bob"}]   | [{id: 1, age: 30}, {id:2, age: 32}] |
| [{id: 5, name: "Charlie"},{id:6, name: "Dale"} | [{id: 5, age: 20}, {id:6, age: 14}] |
所需输出

| c                                                                 |
+-------------------------------------------------------------------+
| [{id: 1, name: "Alice", age: 30},{id:2, name: "Bob", age: 32}]    |
| [{id: 5, name: "Charlie", age: 20},{id:6, name: "Dale", age: 14}] |
我想做点像

select 
id,
name,
age
from openJson(select a from someDb) sd
with (
  id int '$.id',
  age int '$.age'  
)
inner join (
  select 
  id,
  age
  from openJson(select b from someDb)
  with (
    id int  '$.id',
    age int '$.name'
  )
) x
on x.id = sd.id

我认为SQL Server的当前版本不支持
MERGE
功能。唯一的选项是
JSON\u MODIFY()
函数,它可以更新现有属性的值、插入新的
key:value
对或删除键

但在您的情况下,更合适的方法是使用带有显式模式的
OPENJSON()
将存储的JSON解析为表,连接表并重新生成所需的JSON输出:

SELECT 
   c = (
      SELECT a.id, a.name, b.age 
      FROM OPENJSON(v.a) WITH (
         id int '$.id',
         name varchar(50) '$.name'
      ) a
      FULL JOIN OPENJSON(v.b) WITH (
         id int '$.id',
         age int '$.age'
      ) b ON a.id = b.id
      FOR JSON PATH
   )
FROM (VALUES
   ('[{"id": 1, "name": "Alice"}, {"id":2, "name": "Bob"}]',   '[{"id": 1, "age": 30}, {"id":2, "age": 32}]'),
   ('[{"id": 5, "name": "Charlie"}, {"id":6, "name": "Dale"}]', '[{"id": 5, "age": 20}, {"id":6, "age": 14}]')
) v (a, b)
结果:

c
--------------------------------------------------------------------
[{"id":1,"name":"Alice","age":30},{"id":2,"name":"Bob","age":32}]
[{"id":5,"name":"Charlie","age":20},{"id":6,"name":"Dale","age":14}]