我确信这个问题必须在某个地方得到回答,但在我的一生中,无论我如何改变我的搜索短语,我似乎都找不到任何东西。
我需要从两个完全独立的表中选择数据并将信息导出到 JSON。在这种情况下,它们在每个表中都是 1 条记录。
如果我一次只选择 1 条并导出到 JSON,则它们是 1 条记录,但是当我在 SQL 中连接两条记录然后导出到 JSON 时,它们是 1 条记录数组。
只需 1 条记录 SQL 输入:
DECLARE @Json nvarchar(max) =
(
SELECT 'Data1' AS [Data1], 'Data2' AS [Data2]
FOR JSON PATH
, INCLUDE_NULL_VALUES
, WITHOUT_ARRAY_WRAPPER
);
SELECT @Json;
GO
只有 1 条记录 JSON 输出(注意没有数组):
{
"Data1": "Data1",
"Data2": "Data2"
}
2记录SQL输入:
DECLARE @Json nvarchar(max) =
(
SELECT
(
SELECT 'Data1' AS [Data1], 'Data2' AS [Data2]
FOR JSON PATH
, INCLUDE_NULL_VALUES
) AS [Part1]
,
(
SELECT 'Text1' AS [Text1], 'Text2' AS [Text2]
FOR JSON PATH
, INCLUDE_NULL_VALUES
) AS [Part2]
FOR JSON PATH
, WITHOUT_ARRAY_WRAPPER
);
SELECT @Json;
GO
2记录JSON输出(注意包含数组):
{
"Part1": [
{
"Data1": "Data1",
"Data2": "Data2"
}
],
"Part2": [
{
"Text1": "Text1",
"Text2": "Text2"
}
]
}
我“认为”WITHOUT_ARRAY_WRAPPER 是要添加的正确属性,它将解决此问题,但一旦添加该属性,我就会将整个记录作为字符串获取:
{
"Part1": "{\"Data1\":\"Data1\",\"Data2\":\"Data2\"}",
"Part2": "{\"Text1\":\"Text1\",\"Text2\":\"Text2\"}"
}
我知道我可以使用一些文本操作方法来使其工作,但我希望有一个干净的 SQL > JSON 语句。
我目前正在研究SQL Server 2016
但如果有必要的话我可以得到一个2017
or 2019
服务器。不确定以后的 SQL 是否可以更好地处理这个问题,或者是否只是我的查询需要优化。
编辑:我想要的输出是:
{
"Part1": {
"Data1": "Data1",
"Data2": "Data2"
},
"Part2": {
"Text1": "Text1",
"Text2": "Text2"
}
}