SQL 服务器 table 数据到 JSON 路径结果
SQL Server table data to JSON Path result
我正在寻找将 table 结果转换为 JSON 路径的解决方案。
我有一个包含两列的 table,如下所示。第 1 列将始终具有正常值,但第 2 列将具有最多 15 个由“;”分隔的值(分号)。
ID Column1 Column2
--------------------------------------
1 T1 Re;BoRe;Va
我想将上面的列数据转换成下面的JSON格式
{
"services":
[
{ "service": "T1"}
],
"additional_services":
[
{ "service": "Re" },
{ "service": "BoRe" },
{ "service": "Va" }
]
}
我试过创建类似下面的内容,但无法获得我正在寻找的确切格式
SELECT
REPLACE((SELECT d.Column1 AS services, d.column2 AS additional_services
FROM Table1 w (nolock)
INNER JOIN Table2 d (nolock) ON w.Id = d.Id
WHERE ID = 1
FOR JSON PATH), '\/', '/')
请告诉我这是否是我们可以使用 T-SQL
实现的
正如我在评论中提到的,我强烈建议您修复设计并规范化设计。不要在数据库中存储分隔数据; Re;BoRe;Va
应该是 3 行,而不是 1 个分隔行。这并不意味着你不能用你的非规范化数据实现你想要的,只是你的设计有缺陷,因此需要提出来。
实现您所追求的目标的一种方法是使用一些嵌套的 FOR JSON
调用:
SELECT (SELECT V.Column1 AS service
FOR JSON PATH) AS services,
(SELECT SS.[value] AS service
FROM STRING_SPLIT(V.Column2,';') SS
FOR JSON PATH) AS additional_services
FROM (VALUES(1,'T1','Re;BoRe;Va'))V(ID,Column1,Column2)
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;
结果如下 JSON:
{
"services": [
{
"service": "T1"
}
],
"additional_services": [
{
"service": "Re"
},
{
"service": "BoRe"
},
{
"service": "Va"
}
]
}
我正在寻找将 table 结果转换为 JSON 路径的解决方案。
我有一个包含两列的 table,如下所示。第 1 列将始终具有正常值,但第 2 列将具有最多 15 个由“;”分隔的值(分号)。
ID Column1 Column2
--------------------------------------
1 T1 Re;BoRe;Va
我想将上面的列数据转换成下面的JSON格式
{
"services":
[
{ "service": "T1"}
],
"additional_services":
[
{ "service": "Re" },
{ "service": "BoRe" },
{ "service": "Va" }
]
}
我试过创建类似下面的内容,但无法获得我正在寻找的确切格式
SELECT
REPLACE((SELECT d.Column1 AS services, d.column2 AS additional_services
FROM Table1 w (nolock)
INNER JOIN Table2 d (nolock) ON w.Id = d.Id
WHERE ID = 1
FOR JSON PATH), '\/', '/')
请告诉我这是否是我们可以使用 T-SQL
实现的正如我在评论中提到的,我强烈建议您修复设计并规范化设计。不要在数据库中存储分隔数据; Re;BoRe;Va
应该是 3 行,而不是 1 个分隔行。这并不意味着你不能用你的非规范化数据实现你想要的,只是你的设计有缺陷,因此需要提出来。
实现您所追求的目标的一种方法是使用一些嵌套的 FOR JSON
调用:
SELECT (SELECT V.Column1 AS service
FOR JSON PATH) AS services,
(SELECT SS.[value] AS service
FROM STRING_SPLIT(V.Column2,';') SS
FOR JSON PATH) AS additional_services
FROM (VALUES(1,'T1','Re;BoRe;Va'))V(ID,Column1,Column2)
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;
结果如下 JSON:
{
"services": [
{
"service": "T1"
}
],
"additional_services": [
{
"service": "Re"
},
{
"service": "BoRe"
},
{
"service": "Va"
}
]
}