Ich bin beim Zugriff auf Array in JSON mit der neu eingeführten JSON_VALUE-Funktion fest. Bitte beachten Sie folgenden Code -Zugriff auf JSON-Array in SQL Server 2016 mithilfe von JSON_VALUE
IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='JsonData')
DROP TABLE JsonData;
go
CREATE TABLE JsonData(JsonData nvarchar(max));
DECLARE @SQL nvarchar(max);
DECLARE @Table AS TABLE(JsonPath VARCHAR(256));
INSERT INTO JsonData(JsonData)
VALUES(
'{
"firstName": "John",
"lastName" : "doe",
"age" : 26,
"address" : {
"streetAddress": "naist street",
"city" : "Nara",
"postalCode" : "630-0192"
},
"phoneNumbers": [
{
"type" : "iPhone",
"number": "0123-4567-8888"
},
{
"type" : "home",
"number": "0123-4567-8910"
}
]
}')
INSERT INTO @Table
SELECT VALUE FROM OPENJSON('{
"Path1":"$.firstName","Path2":"$.phoneNumbers[:1].number"
}') ;
SELECT @SQL=(SELECT 'UNION SELECT '''+ CAST(JsonPath AS VARCHAR(256)) +''',JSON_VALUE(JsonData,'''+a.JsonPath+''')
FROM JsonData a'
FROM @Table a
FOR XML PATH(''), TYPE)
.value('.','NVARCHAR(MAX)')
FROM @Table t;
SELECT @SQL=RIGHT(@SQL,LEN(@SQL)-5)
PRINT @SQL
EXEC SP_EXECUTESQL @SQL;
Hier Wenn ich bestimmte Telefonnummer dann üblichen Syntax für den Zugriff auf diese Knoten nicht funktioniert zugreifen möchten. Ich erhalte folgende Fehlermeldung in diesem Fall
JSON path is not properly formatted. Unexpected character ':' is found at position 15.
Obwohl, wenn ich bei http://jsonpath.com geprüft, ich bin in der Lage Wert abzurufen. Verwendet SQL Server 2016 eine andere Syntax für den Zugriff auf JSON-Werte?
Dies ist off-topic, aber vielleicht zu know.You nützlich seinem kann DROP TABLE IF EXISTS JsonData anstelle von wenn (wählen) Drop-Tabelle .... –
Einverstanden, alte Gewohnheiten sterben hart :-) –