使用下面的 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
您可以使用交叉申请
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;