2017-05-21 6 views
0

ich eines der Merkmale von MS SQL 2016 zu machen versuche - für mich JSON_VALUE Arbeit ...JSON_VALUE können die gefilterten Ergebnisse erhalten

ich eine Sammlung von Objekten im JSON-Format in einem der Felder gespeichert haben in die Datenbank für jeden Datensatz. Hier

ein Beispiel:

[{"CommunicatorType":0,"UserName":"SkypeUser"},{"CommunicatorType":1,"UserName":"FaceUser"}] 

Was ich versuche zu tun, die Suche innerhalb dieser Spalte auszuführen, die diese Informationen enthält:

"SELECT * from Students WHERE JSON_VALUE(CommunicatorsJson, '$.UserName') LIKE 'SkypeUser'" 

Null-Ergebnis ...

Wenn ich nur ein Objekt als JSON verwende:

{"CommunicatorType":0,"UserName":"SkypeUser"} 

Es funktioniert, kein Problem ... Aber es weigert sich, durch die Sammlung in einem Datensatz zu gehen und dieses bestimmte Feld für einen Wert in der Suche nach einem Datensatz zu überprüfen. Wie muss ich die Suche formatieren? Ist es möglich?

Antwort

0

Sie erhalten eine Unterabfrage müssen die Elemente in der Spalte zuzugreifen:

SELECT * 
FROM Students 
WHERE EXISTS (
    SELECT 1 
    FROM OPENJSON(CommunicatorsJson) 
    WITH (UserName VARCHAR(200) '$.UserName') 
    WHERE UserName = 'SkypeUser' 
) 
+0

Scheinen wie eine mögliche Lösung. Danke Jeroen! fand auch, dass dieser Ansatz auch funktioniert: Select * From Students CROSS OpenJson (CommunicatorsJson) mit (CommunicatorType nvarchar (100), Username nvarchar (100)) Übernehmen wo CommunicatorType = 3 – HotFrost

+0

@HotFrost: dass, wenn unterschiedliche Ergebnisse liefert Es gibt mehrere Objekte mit 'CommunicatorType = 3'. Wenn Sie wissen, dass sie einzigartig sind, sind die Ergebnisse identisch. –

+0

Auch scheint es, dass Ihre Lösung ein bisschen schneller ist, Jeroen – HotFrost

Verwandte Themen