是否可以在 SQL 服务器中使用通配符作为 OPENJSON 的参数?
Is it possible to use wildcards as an argument for OPENJSON in SQL Server?
我有一个嵌套的 JSON 数组,由作为数字的外部键组成,每个键都包含我需要导入到 SQL 服务器中的 table 中的内部数组。 JSON 文件设置如下:
{
"121212": {
"name": name of item,
"subject": item subject
},
"343434": {
"name": name of item,
"subject": item subject
}
}
我可以使用 SQL 服务器函数 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 数组中导入所有数字数组键,这样他们就不会必须单独导入。我尝试过使用通配符,但我尝试过的 none 格式设置选项到目前为止都有效。例如:
OPENJSON(@arrayVariable, '$."[0-9]%"')
使用 OPENJSON() 导入所有以数字命名的 JSON 数组的最佳方法是什么?
试试这个
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]%'
我有一个嵌套的 JSON 数组,由作为数字的外部键组成,每个键都包含我需要导入到 SQL 服务器中的 table 中的内部数组。 JSON 文件设置如下:
{
"121212": {
"name": name of item,
"subject": item subject
},
"343434": {
"name": name of item,
"subject": item subject
}
}
我可以使用 SQL 服务器函数 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 数组中导入所有数字数组键,这样他们就不会必须单独导入。我尝试过使用通配符,但我尝试过的 none 格式设置选项到目前为止都有效。例如:
OPENJSON(@arrayVariable, '$."[0-9]%"')
使用 OPENJSON() 导入所有以数字命名的 JSON 数组的最佳方法是什么?
试试这个
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]%'