sql-server - 索引和查询 JSON 数组
问题描述
我将这样的 JSON 值存储在一个表中:
{
"properties":[
{
"address":{
"value":"A3",
"name":"",
"prop":"",
"path":[
"RealOptionsList9293"
],
"type":"local"
},
"value":{
"type":11,
"value":"portland"
},
"dependents":[
],
"save":true
}
]
}
我想索引 address.value 和 value.value 以便我可以查询它们。MSDN 示例适用于使用计算列的基本属性。它不包括索引数组。可以在数组上进行索引吗?任何示例都会有所帮助。
我想查询具有以下内容的行:
JSON_VALUE(mycolumn, '$.properties[*].address.value') = 'A3'
AND JSON_VALUE(mycolumn, $.properties[*].value.value) = 'portland'
我没有看到[*]
语法。我应该OPENJSON()
改用吗?如果我使用它,我应该使用物化视图吗?
解决方案
如果要查询一个JSON
数组,OPENJSON()
比较合适:
桌子:
CREATE TABLE #Data (
JsonData nvarchar(max)
)
INSERT INTo #Data (JsonData)
VALUES (N'{
"properties":[
{
"address":{
"value":"A3",
"name":"",
"prop":"",
"path":[
"RealOptionsList9293"
],
"type":"local"
},
"value":{
"type":11,
"value":"portland"
},
"dependents":[
],
"save":true
},
{
"address":{
"value":"A4",
"name":"",
"prop":"",
"path":[
"RealOptionsList9293"
],
"type":"local"
},
"value":{
"type":11,
"value":"portland"
},
"dependents":[
],
"save":true
}
]
}')
陈述:
SELECT d.*
FROM #Data d
CROSS APPLY OPENJSON(d.JsonData, '$.properties') WITH (
AddressValue nvarchar(1000) '$.address.value',
ValueValue nvarchar(1000) '$.value.value'
) j
WHERE j.AddressValue = 'A3' AND ValueValue = 'portland'
推荐阅读
- python - 错误:包在没有正确 RPATH 的情况下安装可执行文件 - Buildroot
- pandas - TypeError: unhashable type: 'numpy.ndarray' 应用日期时间时
- php - Laravel Excel import json without escaping quotes
- popup - 当进度条全部达到 100% 时显示警报
- javascript - Javascript:如何显示我点击的这些元素?
- php - 在 Symfony 配置中使用 ::class 引用 FQCN
- ios - CocoaPods 找不到 pod“firebase_auth”的兼容版本:在 Podfile 中
- typescript - 如何从 Express Request 覆盖用户界面
- web-services - 我是否总是必须购买使用(非特定但固定)域的权利?
- woocommerce - 仅获取 woocommerce 父产品名称