小编典典

如何使用T-SQL更新对象数组中的插入JSON属性

sql

我试图找到一种有效的方法来将属性插入到现有的json数组中,而不必按索引进行操作。例如说我们有:

DECLARE @json NVARCHAR(MAX);
SET @json = N'
  {
    "objs":[
       {"id":1},
       {"id":2}
     ]
  }
'

如何为数组中的每个对象添加属性?我想做的是这样的:

JSON_MODIFY(@json,'$.objs[].parent_id',1);

但这是行不通的,因为我没有提供数组索引。我敢肯定有一个简单的解决方案,但是我在文档中找不到。


阅读 180

收藏
2021-05-16

共1个答案

小编典典

如果您使用SQL Server 2017+,则可以使用JSON_MODIFY()表达式作为路径,如文档中所述:

在SQL Server 2017(14.x)和Azure SQL数据库中,您可以提供一个变量作为path的值。

JSON:

DECLARE @json NVARCHAR(MAX);
SET @json = N'{
   "objs":[
      {
         "id":1
      },
      {
         "id":2
      }
   ]
}';

陈述:

SELECT @json = JSON_MODIFY(@json, CONCAT('$.objs[', [key], '].parent_id'), 1)
FROM OPENJSON(@json, '$.objs')

结果:

{
   "objs":[
      {
         "id":1,
         "parent_id":1
      },
      {
         "id":2,
         "parent_id":1
      }
   ]
}
2021-05-16