2016-06-23 1 views
0

Est-il possible d'exécuter des requêtes sur les éléments du tableau? On dirait qu'il fonctionne bien sur les éléments de haut niveau ... Disons que j'ai cette JSON:Interroger les éléments de tableau JSON?

{ 
    "_id": "5769cfbf7e45b52e388bbc78", 
    "address": { 
    "street": "2 Avenue", 
    "zipcode": "10075", 
    "building": "1480", 
    "coord": [ 
     73.9557413, 
     40.7720266 
    ] 
    }, 
    "borough": "Manhattan", 
    "cuisine": "Italian", 
    "grades": [ 
    { 
     "date": "2014-10-01T00:00:00.000Z", 
     "grade": "A", 
     "score": 11 
    }, 
    { 
     "date": "2014-01-06T00:00:00.000Z", 
     "grade": "B", 
     "score": 17 
    } 
    ], 
    "name": "Vella", 
    "restaurant_id": "41704620" 
} 

Est-il possible d'utiliser JSON_QUERY/JSON_VALUE pour faire une clause where contre grades [xxx] .score? C'est à dire. Je veux retourner tous les documents où N'IMPORTE QUELLE grade.score est> = 17.

+0

Je pense que vous voulez utiliser [ 'OPENJSON'] (https: // msdn. microsoft.com/en-us/library/dn921879.aspx). Je n'ai pas SQL Server 2016 disponible, donc je ne peux pas vraiment aider plus loin que cela. – Blorgbeard

Répondre

2

SQL Azure et SQL Server 2016 prend en charge JSON nativement maintenant. Vous pouvez utiliser la requête suivante à la clause 'EXISTS', ou tout ce qui est nécessaire (en supposant @json contient les données JSON données):

SELECT g.score as score 
FROM OPENJSON(@json) WITH (Id varchar(max)) j 
    CROSS APPLY OPENJSON(JSON_QUERY(@json, '$.grades')) WITH (score int) AS g 
WHERE g.score = 17 
+0

SQL Azure et ** SQL Server 2016 ** prennent en charge JSON en mode natif. – qxg