Skip to content

OPENJSON и CROSS APPLY

Пересказ статьи Marty Catherall. OPENJSON and CROSS APPLY


OPENJSON является основным средством манипуляции документами JSON в T-SQL.

Мы уже видели, что можем использовать схему по умолчанию, которая вернет метаданные о документе JSON, или же можем использовать явную схему, когда мы вводим предложение WITH и PATH - путь к требуемым данным.

Пока в наших примерах мы использовали либо схему по умолчанию, либо явную схему, но не смешивали их вместе.
На самом деле, если вы попытаетесь сделать это в простом запросе, то обнаружите, что это невозможно без использования оператора APPLY.

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 - т.к. это имя присутствует как в явной схеме, так и в схеме по умолчанию, и, следовательно, требует алиаса.

Надеюсь, что эта информация была вам полезна. Увидимся.

Категории: T-SQL

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.