【问题标题】:T-SQL read from JSON Array从 JSON 数组读取 T-SQL
【发布时间】:2017-10-05 08:35:38
【问题描述】:

我有以下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 应该在一个查询中返回所有数据。

【问题讨论】:

  • 如果您尝试过,那么您会遇到什么 sql 错误。
  • 是的,我做到了。您可以看到问题中的查询。没有错误。 .. 它可以工作,但不会在一次查询中返回 JSON 中的所有数据。
  • 您是否应该尝试通过定义临时表并将结果存储到临时表中,即#myResultTable 并将其传递给 OPENJSON

标签: sql-server json tsql parsing sql-server-2016


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2019-04-21
    • 2019-10-24
    • 2021-05-27
    • 2021-12-01
    相关资源
    最近更新 更多