Sql server JSON数组的索引和查询
我将类似这样的JSON值存储在一个表中:Sql server JSON数组的索引和查询,sql-server,azure-sql-database,Sql Server,Azure Sql Database,我将类似这样的JSON值存储在一个表中: { "properties":[ { "address":{ "value":"A3", "name":"", "prop":"", "path":[ "RealOptionsList9293" ], "type":"local
{
"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数组或对象时,您应该使用设计用于此操作的JSON\u query
JSON_值
被设计为返回标量,因此,如果将JSON_值
与地址、值甚至依赖项(在JSON中)一起使用,它将始终返回null。但如果将其与save一起使用,它将返回其值
所以,你需要做的是这样的:
SELECT
JSON_VALUE([Address],'$.value')
FROM (
SELECT
JSON_QUERY(@json,'$.properties[0].address') AS [Address]
, JSON_QUERY(@json,'$.properties[0].value') AS [Value]
, JSON_QUERY(@json,'$.properties[0].dependents') AS [dependents]
) arrays
如果要查询
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'
在我的例子中,properties数组中的元素数是一个变量。上述方法不起作用,因为您可能有一个或多个元素。@frosty上述方法适用于您提供的示例。如果json比这更复杂,那么json_查询就应该做到这一点。