При запросе с использованием OPEN JSON будет ли результирующий набор иметь mimi c порядок массива JSON или порядок будет случайным? - PullRequest
1 голос
/ 27 февраля 2020

Допустим, у меня есть этот массив JSON:

[{
    "Field": "1"
}, {
    "Field": "2"
}, {
    "Field": "3"
}]

И я использую его в запросе OpenJSON на SQL Сервере.

Будет ли набор результатов запроса всегда тот же порядок, что и у массива:

Field
1
2
3

Или он будет случайным, как и любой обычный запрос Select без порядка на?

1 Ответ

0 голосов
/ 27 февраля 2020

В случае массива JSON и вызова OPENJSON() со схемой по умолчанию, основанной на документации , результатом является таблица со столбцами key, value и type, а также Столбец key содержит индекс элемента в указанном массиве. Если вы хотите получить упорядоченный набор, вы должны использовать следующую инструкцию:

DECLARE @json nvarchar(max) = N'[{ "Field": "1" }, { "Field": "2" }, { "Field": "3" }]'

SELECT [value]
FROM OPENJSON(@json)
ORDER BY CONVERT(int, [key])

-- or

SELECT c.Field
FROM OPENJSON(@json) j
CROSS APPLY OPENJSON(j.[value]) WITH (Field int '$.Field') c
ORDER BY CONVERT(int, j.[key])
...