我有一个使用OPENJSON将JSON数据导入表的SQL查询。我的问题是我需要的数据是嵌套的。如何在JSON路径中使用通配符获得所需的信息?
SELECT @Set =
BulkColumn FROM OPENROWSET
(BULK 'Sets.json', DATA_SOURCE = 'MyAzureJson', SINGLE_BLOB) JSON;
INSERT INTO [Sets]
SELECT [name]
FROM OPENJSON(@Set)
WITH(
[name] nvarchar(50) '$.*.name'
)
我的json文件是这样设置的。
{
"testOne" : {
name: "nameOne"
},
"testTwo : {
name: "nameTwo"
}
}
我尝试的所有内容中出现的错误。
JSON路径格式不正确。在位置2找到了意外的字符'*'。
我试过了 。 * []无效
最佳答案
据我所知,OPENJSON中不支持通配符。
相反,您可以通过忽略搜索中的字段名称来解决。为此使用JSON_VALUE
。
INSERT INTO [Sets]
SELECT
JSON_VALUE([value], '$.name')
FROM
OPENJSON(@Set)
说明:如果未在
WITH
子句中定义OPENJSON的变量,而是执行简单的SELECT * FROM OPENJSON(@Set)
查询,则将获得键,值和类型列的结果(请参见下面的示例输出)。由于key
包含有问题的字段名称,因此您可以忽略该部分,而只需查看数据的value
列。[key] [value] [type]
----- ------- ------
testOne { name: "nameOne" } 5
testTwo { name: "nameTwo" } 5