我在以下脚本中使用 SQL Server 2017 中的字符串拼接函数 string_agg,而不是 SQL Server 2016 中的 JSON 函数。详见此处
select
product, '{' + STRING_AGG( '"' + attribute + '":"' + STRING_ESCAPE(value,'json') + '"' ,',') + '}' as attributes
from ProductAttributes
group by product
以下是这两个产品条目的输出结果
产品属性
1 {"color":"红色","size":"小号"}
2 {"processor":"英特尔","ram":"16","weight":"2"}
![在此输入图片描述](https://istack.dev59.com/wgV9N.webp)
如果您使用的是 SQL Server 2017 之前的版本,您可以使用SQL XML Path 字符串连接,如下所示。
SELECT
product,
'{' + STUFF(
(
SELECT
',' + '"' + attribute + '":"' + STRING_ESCAPE(value,'json') + '"'
FROM ProductAttributes a
where a.product = p.product
FOR XML PATH(''),TYPE
).value('.','VARCHAR(MAX)'
), 1, 1, ''
) + '}' As attributes
from ProductAttributes p
group by product
开发人员将获得相同的结果
![输入图像描述](https://istack.dev59.com/peFr4.webp)
我已更新上面的SQL查询并在@Eilert的评论中使用了String_Escape()函数