使用OPENJSON获取密钥对列表

问题描述 投票:0回答:1

使用下面的 JSON,我想检索参数名称和参数值的密钥对列表。 我不想硬编码任何东西,因为参数会改变。

我有两个查询返回我想要的结果,但第一个查询的执行计划更差。

这些是最好的选择,还是有另一种更好的方法来实现我所追求的目标?

    DECLARE @json NVARCHAR(MAX) = '{ "SearchParameters": [ { "LastName": "Smith" }, { "Org": "AAA" }, { "Postcode": "SW1" } ] }';

    SELECT z.[key], z.value
    FROM OPENJSON(@json) x
    OUTER APPLY OPENJSON(x.value) y
    OUTER APPLY OPENJSON(y.value) z


    SELECT 
    (SELECT [key] from OPENJSON([value]) ) AS KeyName
    ,(SELECT [value] from OPENJSON([value]) ) AS KeyValue
    FROM 
    (
        SELECT 
        [value]
        FROM OPENJSON(@json,'$.SearchParameters') 
    ) x
sql json
1个回答
0
投票

您可以使用交叉申请

DECLARE @json NVARCHAR(MAX) = '{ "SearchParameters": [ { "LastName": "Smith" }, { "Org": "AAA" }, { "Postcode": "SW1" } ] }';

SELECT k.[key] AS ParameterName, k.value AS ParameterValue
FROM OPENJSON(@json, '$.SearchParameters') AS p
CROSS APPLY OPENJSON(p.value) AS k;
© www.soinside.com 2019 - 2024. All rights reserved.