4

我有一个使用 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 发现意外字符“*”。

我试过了 。* [] 没有任何效果

4

1 回答 1

0

据我所知,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
于 2018-10-28T22:59:55.247 回答