0

我有一个嵌套的 JSON 数组,由数字的外部键组成,每个外部键都包含我需要导入到 SQL Server 中的表中的内部数组。JSON 文件的设置如下:

{
    "121212": {
        "name": name of item,
        "subject": item subject
    },
    "343434": {
        "name": name of item,
        "subject": item subject
    }
}

我可以使用 SQL Server 函数 OPENJSON() 导入单个数组而不会出现这样的问题:

DECLARE @arrayVariable VARCHAR(MAX)
SELECT @arrayVariable = BulkColumn FROM OPENROWSET(BULK 'array.json', SINGLE_BLOB) JSON
INSERT INTO ArrayTable (arrayName, arraySubject)
SELECT * FROM OPENJSON(@arrayVariable, '$."121212"') 
WITH (
     arrayName    VARCHAR(MAX)    '$.name',
     arraySubject VARCHAR(MAX)    '$.subject'
)

上述代码成功将数组 121212 导入到 ArrayTable 中。但是,我想知道是否有一种解决方案可以利用通配符作为 OPENJSON 的参数,以便从 JSON 数组中导入所有数字数组键,这样就不必单独导入它们。我尝试过使用通配符,但到目前为止我尝试过的格式化选项都没有奏效。例如:

OPENJSON(@arrayVariable, '$."[0-9]%"')

使用 OPENJSON() 导入所有带有数字标题的 JSON 数组的最佳方法是什么?

4

1 回答 1

1

尝试这个

DECLARE @arrayVariable VARCHAR(MAX) = N'{
    "121212": {
        "name": "name of item1",
        "subject": "item subject1"
    },
    "343434": {
        "name": "name of item2",
        "subject": "item subject2"
    }
}'

SELECT      v.arrayName, v.arraySubject
FROM        OPENJSON(@arrayVariable) AS r
CROSS APPLY OPENJSON(r.value) 
            WITH (
                 arrayName    VARCHAR(MAX)    '$.name',
                 arraySubject VARCHAR(MAX)    '$.subject'
            ) AS v
WHERE       r.[key] LIKE '[0-9]%'
于 2020-08-10T15:02:44.437 回答