对于一个最小的工作示例,假设我有一个存储 JSON 的列,其结构类似于以下内容。
DECLARE @json NVARCHAR(4000) =
'{"Dims":
[
{"Name":"Apple", "Baking": ["Pie","Tart"], "Plant":"Tree"},
{"Name":"Tomato", "Cooking":["Stew","Sauce"], "Plant":"Vine"},
{"Name":"Banana","Baking":["Bread"], "Cooking":["Fried"], "Plant":"Arborescent"}
]}
'
这是有效的 JSON,并且可以返回标量。
SELECT ISJSON(@json);
1
SELECT JSON_VALUE(@json,'$.Dims[0].Name');
Apple
但是,当我使用JSON_QUERY
返回所有"Dims"
SQL Server 2017 错误的名称时。
SELECT JSON_QUERY(@json,'$.Dims[*].Name');
Msg 13607, Level 16, State 4, Line 16 JSON path is not properly formatted. Unexpected character '*' is found at position 7.
这应该返回
["Apple", "Tomato", "Banana"]
这是一个有效的标准 JSON 路径。任何想法为什么这不起作用以及如何让它在 SQL Server 2017 上工作。
看起来目前不支持,并且会成为一个很好的反馈项目。
您可以使用以下查询将名称放入结果集中:
从那里你可以构造一个新的 JSON 文档,但是如果你想要一个原语数组,你需要做这样的事情。
我认为没有一种方法可以使用 FOR JSON 查询来获取原始值数组(即不是对象)。