【发布时间】:2019-03-15 10:37:34
【问题描述】:
我是 sqlserver 的新手。我想将 json 数据转换为记录并插入到表中。 我有类似的json数据
{
"HEADER":[
{
"seq_id":343,
"max_processed_scn":649044274,
"time_processed":"13-MAR-19 09.03.23.081055 PM",
"status":"COMPLETED"
},
{
"seq_id":344,
"max_processed_scn":649214903,
"time_processed":"15-MAR-19 12.49.31.606172 PM",
"status":"COMPLETED"
}
],
"DETAIL":[
{
"seq_id":11215,
"event_id":1,
"caller_seq":343,
"event_description":"BEGIN.."
},
{
"seq_id":11216,
"event_id":2,
"caller_seq":343,
"event_description":"STARTING"
},
{
"seq_id":11217,
"event_id":2,
"caller_seq":343,
"event_description":"STARTED "
} "event_description":"TOTAL"
]
}
所以我想将数组“标题”插入到一个表中,将另一个数组“详细信息”插入到另一个表中。任何人都可以帮助我实现这一目标。在此先感谢
所以我需要像这样的详细表数据
seq_id max_processed_scn time_processed status
343 649044274 13-MAR-19 09.03.23.081055 PM COMPLETED
344 649214903 15-MAR-19 12.49.31.606172 PM COMPLETED
我使用了这个查询:
DECLARE @json NVARCHAR(MAX)
SET @json =
N'[{
"HEADER":[
{
"seq_id":343,
"max_processed_scn":649044274,
"time_processed":"13-MAR-19 09.03.23.081055 PM",
"status":"COMPLETED"
},
{
"seq_id":344,
"max_processed_scn":649214903,
"time_processed":"15-MAR-19 12.49.31.606172 PM",
"status":"COMPLETED"
}
],
"DETAIL":[
{
"seq_id":11215,
"event_id":1,
"caller_seq":343,
"event_description":"BEGIN.."
},
{
"seq_id":11216,
"event_id":2,
"caller_seq":343,
"event_description":"STARTING"
},
{
"seq_id":11217,
"event_id":2,
"caller_seq":343,
"event_description":"STARTED "
} "event_description":"TOTAL"
]
}
]'
SELECT *
FROM OPENJSON(@json, '$.HEADER')
WITH (seq_id INT, max_processed_scn INT, time_processed NVARCHAR(100), [status] NVARCHAR(100))
【问题讨论】:
-
我假设您使用的是 SQL Server 2016/2017?显示您希望数据在 SQL Server 中的样子会有所帮助。另外,到目前为止,您尝试过什么?
-
如果你有 SQL Server 2016+,这可以通过
OPENJSON轻松实现(例如SELECT * FROM OPENJSON(@json, '$.HEADER') WITH (seq_id INT, max_processed_scn INT, time_processed NVARCHAR(100), [status] NVARCHAR(100))和另一个DETAIL)。如果你不这样做,那么在 T-SQL 中几乎不值得这样做;客户端代码装备精良。 -
在@pythonCoder 的帖子中展示您的尝试。那里的代码不可读。我已经为您添加了 SQL Server 2017 标记,因为这在这里非常重要。
-
@pythonCoder 添加您尝试过的内容以及您的问题中的问题,而不是 cmets
-
@pythonCoder 顺便说一句,您发布的 JSON 字符串没有
HEADERS属性。它是一个包含HEADER和DETAIL属性的对象。那些包含数组。至少您需要修复名称并访问数组元素
标签: json sql-server sql-server-2017