我试图找到一种有效的方法来将属性插入到现有的json数组中,而不必按索引进行操作。例如说我们有:
DECLARE @json NVARCHAR(MAX); SET @json = N' { "objs":[ {"id":1}, {"id":2} ] } '
如何为数组中的每个对象添加属性?我想做的是这样的:
JSON_MODIFY(@json,'$.objs[].parent_id',1);
但这是行不通的,因为我没有提供数组索引。我敢肯定有一个简单的解决方案,但是我在文档中找不到。
如果您使用SQL Server 2017+,则可以使用JSON_MODIFY()表达式作为路径,如文档中所述:
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 } ] }