Je suis bloqué lorsque j'accède à un tableau dans json en utilisant la fonction JSON_VALUE nouvellement introduite. S'il vous plaît considérer le code ci-dessous -Accès à JSON Array dans SQL Server 2016 à l'aide de 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;
ici Si je veux accéder à numéro de téléphone spécifique, syntaxe habituelle d'accéder à ce noeud ne fonctionne pas. J'obtiens l'erreur suivante dans ce cas
JSON path is not properly formatted. Unexpected character ':' is found at position 15.
Bien que quand je suis arrivé à http://jsonpath.com, je suis en mesure de récupérer la valeur. SQL Server 2016 utilise-t-il une syntaxe différente pour accéder aux valeurs JSON? SQL Server 2016 prend en charge JSON.
Ceci est hors sujet, mais pourrait être utile pour know.You peut utiliser DROP TABLE SI EXISTS JsonData au lieu de si (sélectionnez) drop table .... –
D'accord, les vieilles habitudes meurent dur :-) –