OPENJSON и CROSS APPLY
Пересказ статьи Marty Catherall. OPENJSON and CROSS APPLY
OPENJSON является основным средством манипуляции документами JSON в T-SQL.
Мы уже видели, что можем использовать схему по умолчанию, которая вернет метаданные о документе JSON, или же можем использовать явную схему, когда мы вводим предложение WITH и PATH - путь к требуемым данным.
Пока в наших примерах мы использовали либо схему по умолчанию, либо явную схему, но не смешивали их вместе.
На самом деле, если вы попытаетесь сделать это в простом запросе, то обнаружите, что это невозможно без использования оператора APPLY.
OPENJSON фактически является табличнозначной функцией, которая парсит JSON - либо в явную схему (которую мы предоставляем), либо в схему по умолчанию.
Мы можем сочетать эти две схемы при помощи CROSS APPLY. Например, так
Этот метод может оказаться весьма кстати при попытке проникнуть во вложенные массивы и объекты, содержащиеся в документе JSON.
Заметим также, что различное присвоение алиасов (для явной схемы и схемы по умолчанию) <ссылка на пред статью> позволяет нам запрашивать данные из обеих схем. Это делает возможным получение элемента, который называется value - т.к. это имя присутствует как в явной схеме, так и в схеме по умолчанию, и, следовательно, требует алиаса.
Надеюсь, что эта информация была вам полезна. Увидимся.
OPENJSON фактически является табличнозначной функцией, которая парсит JSON - либо в явную схему (которую мы предоставляем), либо в схему по умолчанию.
Мы можем сочетать эти две схемы при помощи CROSS APPLY. Например, так
DECLARE @json NVARCHAR(MAX) =
N'
{
"Configuration Property": {
"Configuration name": "recovery interval (min)",
"Value": 0,
"minimum": 0,
"maximum": 32767,
"value_in_use": 0,
"description": "Maximum recovery interval in minutes",
"is_dynamic": true,
"is_advanced": true
}
}
';
SELECT
DS.[key]
,DS.[value]
,DS.[type]
,ES.[Configuration name]
,ES.[Value]
,ES.[minimum]
,ES.[maximum]
,ES.[value_in_use]
,ES.[description]
,ES.[is_dynamic]
,ES.[is_advanced]
FROM
OPENJSON(@json) AS DS
CROSS APPLY
OPENJSON(DS.[value])
WITH
(
[Configuration name] NVARCHAR(35)
,[Value] NVARCHAR(35)
,[minimum] NVARCHAR(35)
,[maximum] NVARCHAR(35)
,[value_in_use] NVARCHAR(35)
,[description] NVARCHAR(35)
,[is_dynamic] NVARCHAR(35)
,[is_advanced] NVARCHAR(35)
) AS ES
GO
Этот метод может оказаться весьма кстати при попытке проникнуть во вложенные массивы и объекты, содержащиеся в документе JSON.
Заметим также, что различное присвоение алиасов (для явной схемы и схемы по умолчанию) <ссылка на пред статью> позволяет нам запрашивать данные из обеих схем. Это делает возможным получение элемента, который называется value - т.к. это имя присутствует как в явной схеме, так и в схеме по умолчанию, и, следовательно, требует алиаса.
Надеюсь, что эта информация была вам полезна. Увидимся.
Обратные ссылки
Автор не разрешил комментировать эту запись
Комментарии
Показывать комментарии Как список | Древовидной структурой