T-SQL的JSON阵列

T-SQL的JSON阵列

问题描述:

读我有以下JSONT-SQL的JSON阵列

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

,需要的数值分析表。

我曾尝试:

-- 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' 
) 

它可以让sourcedataSetId列或获得FieldId列,但我仍然无法合并这两个解决方案,来解析这两个非阵列和阵列的数据。

SELECT应该返回一个查询中的所有数据。

+0

如果你试过那么你得到什么SQL错误。 – 2017-10-05 08:47:03

+0

是的,我做过。你可以看到问题中的查询。没有错误。 ..它的工作原理,但不会在一个查询中返回来自JSON的所有数据。 – DNac

+0

如果您尝试通过定义临时表并将结果存储到临时表(即#myResultTable)并将其传递给OPENJSON – 2017-10-05 10:26:17

这个问题有很多解决方案。其中之一是...

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