2017-10-05 2 views
0

je les suivantes JSONT-SQL lues à partir JSON tableau

DECLARE @json NVARCHAR(max) = ' 
{ 
    "source": "one", 
    "dataSetId":"a3d5-14fda14", 
    "data": [ 
    { 
     "FieldId": 10 
    } 
    ] 
} 
' 

et doivent analyser les valeurs à la table.

J'ai essayé:

-- meta 
SELECT * 
FROM OPENJSON(@json) 
    WITH (source NVARCHAR(20) 
     ,dataSetId NVARCHAR(50) 
     ,FieldId INT '$.data.FieldId' 
) 

-- array 
SELECT * 
FROM OPENJSON(@json, '$.data') 
    WITH (source NVARCHAR(20) 
     ,dataSetId NVARCHAR(50) 
     ,FieldId int '$.FieldId' 
) 

Il fonctionne pour obtenir source et dataSetId colonnes ou pour obtenir FieldId colonne, mais je suis toujours incapable de fusionner les deux solutions, pour analyser à la fois non-tableau et les données du tableau. Le SELECT doit renvoyer toutes les données dans une requête.

+0

Si vous avez essayé alors Quelle erreur sql vous obtenez. –

+0

Oui, je l'ai fait. Vous pouvez voir les requêtes dans la question. Il n'y a pas d'erreur. .. cela fonctionne, mais ne renvoie pas toutes les données de JSON dans une requête. – DNac

+0

Si vous essayez avec en définissant une table temporaire et stocker votre résultat dans la table temporaire i.e #myResultTable et passez-le à OPENJSON –

Répondre

0

Il existe de nombreuses solutions pour cette question. l'un d'entre eux est ....

DECLARE @json NVARCHAR(max) = ' 
{ 
    "source": "one", 
    "dataSetId":"a3d5-14fda14", 
    "data": [ 
    { 
     "FieldId": 10 
    } 
    ] 
}' 

SELECT A.* , B.* 
FROM OPENJSON(@json) 
    WITH (source NVARCHAR(20) 
     ,dataSetId NVARCHAR(50)) A , 
OPENJSON(@json, '$.data') 
    WITH ( FieldId int '$.FieldId') B