处理 SQL OPENJSON WITH 命令中的嵌套 JSON?

Dealing with nested JSON in SQL OPENJSON WITH command?

我有 JSON 具有某种结构的值,但我正在努力达到第 3 级。我正在使用 CROSS APPLY OPENJSON 获取“Lines”数据,但我需要从 TaxCode 区域中获取“Code”……它似乎是它自己的 JSON 数组?

如有任何帮助,我们将不胜感激……这就是我目前所拥有的……

DECLARE @JSONText NVarChar(max) = '{
    "UID": "845bc256-6027-4a89-8c05-35e4bb8e6aba",
    "Number": "00013608",
    "Lines": [{
        "RowID": 1,
        "Total": 20.0,
        "TaxCode": "@{UID=f2cc83e5-0f7f-4831-9d88-dbe110e0683a; Code=S15}"
    },{
        "RowID": 2,
        "Total": 55.49,
        "TaxCode": "@{UID=a5cc34e5-0fr4-4325-9d67-bdh110e0683a; Code=S17}"
    }]
}';

SELECT J.[UID],J.[Number],LI.*
FROM OPENJSON (@JSONText)
WITH (
    [UID] nvarchar(512) '$."UID"',
    [Number] nvarchar(50) '$."Number"',
    [LineItems] NVarChar(max) '$."Lines"' AS JSON
) J
CROSS APPLY OPENJSON (J.[LineItems])
WITH (
    [RowID] INT '$."RowID"',
    [Total] Decimal(12,2) '$."Total"',
    [TaxCode] NVarChar(512) '$."TaxCode"',
    [TaxCodeTest] NVarChar(50) '$."TaxCode.Code"'
) LI;

由于提供的 TaxCode 值不是“真实的”JSON 对象,我不得不使用一些 SQL 来处理它,因为字符串结束获取所需的数据。我最终创建了一个函数来使用这个问题的灵感...

A SQL Query to select a string between two known strings