Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / OpenJson() возвращает NULL вместо подмножества в режиме AS JSON / 3 сообщений из 3, страница 1 из 1
19.09.2018, 10:52
    #39704787
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OpenJson() возвращает NULL вместо подмножества в режиме AS JSON
То ли баг, то ли я к вечеру туплю уже. Вроде все, как в примере из справки:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
declare @Value nvarchar(max) = N'{
	"id": "27fa6c8d-d136-4913-8245-9fdb1d60ac19",
	"data": [{
			"id": "1",
			"value": "My value",
			"additionalInfo": "{  \"State\": \"Done\",  \"Category\": \"Misc.\"}"
		}]
}';

select js.Id, js.Value, js.XData, js.additionalInfo
	, xd.*
from openjson(@Value, '$.data') with (
	Id int '$.id',
	Value varchar(50) '$.value',
	XData nvarchar(max) '$.additionalInfo',
	additionalInfo nvarchar(max) AS JSON
) js
	outer apply openjson(js.XData) xd;

Однако, поле additionalInfo всегда NULL.

Видно, что XData в принципе достаточно, и даже apply за него цепляется и работает. В чем тогда тайный смысл AS JSON, для меня загадка.

Проверялось на:

Код: plaintext
1.
2.
3.
Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64) 
	Oct 28 2016 18:17:30 
	Copyright (c) Microsoft Corporation
	Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2012 R2 Datacenter 6.3 <X64> (Build 9600: ) (Hypervisor)

База свежесозданная, совместимость 130, на мастере то же самое.
...
Рейтинг: 0 / 0
19.09.2018, 11:18
    #39704802
AlanDenton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OpenJson() возвращает NULL вместо подмножества в режиме AS JSON
Ну как бы когда у вас может быть одно значение, а может быть массив, во втором случае как раз и нужен AS JSON:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
DECLARE @Value NVARCHAR(MAX) = N'{
    "data": [{
    "additionalInfo": "{ \"State\": \"Done\", \"Category\": \"Misc.\"}",
    "additionalInfo2": [
            { "State": "Done", "Category": "Misc." },
            { "State": "In progress", "Category": "Misc."  }
        ]
    }]
}';

SELECT xd.*
     , xd2.*
FROM OPENJSON(@Value, '$.data') WITH (
      additionalInfo NVARCHAR(MAX)
    , additionalInfo2 NVARCHAR(MAX) AS JSON
) js
OUTER APPLY OPENJSON(additionalInfo)
    WITH ([State] SYSNAME, Category SYSNAME) xd
OUTER APPLY OPENJSON(additionalInfo2)
    WITH ([State] SYSNAME, Category SYSNAME) xd2
...
Рейтинг: 0 / 0
19.09.2018, 13:06
    #39704881
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OpenJson() возвращает NULL вместо подмножества в режиме AS JSON
AlanDenton,

Т.е. фигурные скобки это не сабсет, это атомик. Нужны квадратные. Понятно, спасибо, пойду учить разметку.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / OpenJson() возвращает NULL вместо подмножества в режиме AS JSON / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]