问题描述
假设我有以下 JSON,
[
{ "id" : 2,"firstName": "John","lastName": "Smith","age": 25,"dateOfBirth": "2007-03-25T12:00:00","data":{"$source":"Online"} },]
我可以使用 OPEnjsON 为除 source
之外的所有列动态创建列。
这是我的代码:
SELECT *
FROM OPEnjsON(@json)
WITH (id int,firstName nvarchar(50),lastName nvarchar(50),age int,dateOfBirth datetime2,[$Source] varchar(50))
除了嵌套的 json data
之外,我正在恢复每一列。
随意编辑问题标题
解决方法
不太清楚为什么您的来源以“$”开头。如果要从嵌套的 json 中获取数据,则需要标识列的根。例如
DECLARE @JSON NVARCHAR(max) =
N'[
{ "id" : 2,"firstName": "John","lastName": "Smith","age": 25,"dateOfBirth": "2007-03-25T12:00:00","data":{"source":"Online"} }
]'
SELECT *
FROM OPENJSON(@json)
WITH (id int,firstName nvarchar(50),lastName nvarchar(50),age int,dateOfBirth datetime2,source VARCHAR(50) '$.data.source',data nvarchar(max) AS JSON)