我有以下 json ,當我試圖將它提取到 sql 時,我得到了空。
我需要 CusP.id、CusP.custldId、cusfield.id、值
DECLARE @json NVARCHAR(MAX);
SELECT @json = '{
"includ": {
"cusP": {
"542310": {
"id": 542310,
"custldId": 155,
"cusfield": {
"id": 155,
"type": "custfi"
},
"projectId": 17435,
"project": {
"id": 17435,
"type": "projects"
},
"value": "META DATA",
"createdAt": "2022-01-16T05:11:20Z",
"createdBy": 222222
},
"21000": {
"id": 21000,
"custldId": 426,
"cusfield": {
"id": 426,
"type": "custfi"
},
"projectId": 786044,
"project": {
"id": 786044,
"type": "projects"
},
"value": "delta55",
"createdAt": "2022-01-17T10:03:07Z",
"createdBy": 333333
}
}
}
}'
這就是我正在嘗試的:
SELECT
D.cusPid,
d.[value],
c.cusfieldid,
cd.projectId
FROM OPENJSON(@json, '$.includ.cusP')
WITH (
cusPid NVARCHAR(max) '$.id',
[value] NVARCHAR(max) '$.value'
) D
CROSS APPLY OPENJSON(@json, '$.includ.cusP.custfi')
WITH (
cusfieldid VARCHAR(100) '$.id'
) C
CROSS APPLY OPENJSON(@json, '$.includ.cusP.project')
WITH (
projectId VARCHAR(100) '$.id'
) Cd;
這就是我期望的結果
| cusPid | 價值 | 卡斯菲爾德 | 專案編號 |
|---|---|---|---|
| 542310 | 元資料 | 155 | 17435 |
| 21000 | delta55 | 426 | 786044 |
uj5u.com熱心網友回復:
問題是 ID 本身也用作子屬性的鍵,并且OPENJSON不允許可變路徑(超出陣列),因此您需要一個額外的級別:
SELECT P.id AS cuspID, P.[value], P.cusfieldid, [projectId]
FROM OPENJSON(@json, '$.includ.cusP') J
CROSS APPLY OPENJSON(J.[value]) WITH (
id INT,
[value] NVARCHAR(MAX),
[projectId] INT,
cusfieldid INT '$.cusfield.id'
) P
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/456552.html
