我将这样的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()
吗?如果使用它,是否应该使用实例化视图?
答案 0 :(得分:1)
当您要查询JSON数组或对象时,应使用JSON_QUERY
来设计。 JSON_VALUE
旨在返回标量,因此,如果您将JSON_VALUE
与地址,值甚至从属关系一起使用(在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
答案 1 :(得分:1)
如果要查询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'