我們有一個 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
非常感謝任何指導!
uj5u.com熱心網友回復:
嵌套您的 JSON 呼叫:
SELECT MT.Id,
JT.InitialCost,
JT.OtherCost,
DV.value AS DateOfVisit
FROM #MyTable MT
CROSS APPLY OPENJSON(MT.MyJsonText)
WITH (InitialCost decimal(8,2),
OtherCost decimal(8,2),
DatesOfVisit nvarchar(MAX) AS JSON) JT
CROSS APPLY OPENJSON(DatesOfVisit) DV;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/376081.html
標籤:数组 json sql-server json查询 打开-json
下一篇:C#序列化JSON陣列而不使用類
