【发布时间】:2022-01-12 17:22:46
【问题描述】:
我们有一个 SQL Server 表,其中有一个包含 JSON 数据的 varchar(max) 列,但其中一个字段是一个数组。尽我所能,我无法让它每行提取这些。在过去,我设法做到了每个数组都由命名成员组成,因此使用另一个 CROSS APPLY WITH (...) 并命名成员。但是很难弄清楚如何使用更简单的值列表来做到这一点。
伪代码:
DROP TABLE IF EXISTS #MyTable
CREATE TABLE #MyTable (
Id uniqueidentifier
,MyJsonText nvarchar(max))
INSERT INTO #MyTable(Id, MyJsonText) VALUES
('EDA4A604-59F4-4E4E-9C20-08D82314D8F6', '{"InitialCost":75.0,"OtherCost":50.0,"DatesOfVisit":["Wed, 26 Feb 2020 00:00:00 GMT","Fri, 20 Mar 2020 00:00:00 GMT"],"CatNumber":"PH123456"}')
SELECT ISJSON(MyJsonText) FROM #MyTable -- Check JSON ok
SELECT
mt.Id
,mt_j.InitialCost
,mt_j.OtherCost
,mt_j.CatNumber
FROM #MyTable mt
CROSS APPLY OPENJSON(mt.MyJsonText) WITH (
InitialCost decimal(8,2)
,OtherCost decimal(8,2)
,CatNumber varchar(50)) as mt_j
以上内容适用于 JSON 中的“顶级”数据,但我该如何返回:
Id InitialCost OtherCost DatesOfVisit CatNumber
EDA4A604-59F4-4E4E-9C20-08D82314D8F6 75.00 50.00 Wed, 26 Feb 2020 00:00:00 GMT PH123456
EDA4A604-59F4-4E4E-9C20-08D82314D8F6 75.00 50.00 Fri, 20 Mar 2020 00:00:00 GMT PH123456
非常感谢任何指导!
【问题讨论】:
标签: arrays json sql-server json-query open-json