Как использовать JSON_MODIFY, чтобы превратить значение типа int json в массив одной длины? - PullRequest
0 голосов
/ 27 апреля 2020

У нас есть сетки, для которых у нас есть пользовательские фильтры, и вы можете сохранить фильтры как объект JSON в конкретной таблице, tblUserPersistedValue (вместе с пользовательским полем). Таким образом, мы обновляем страницу, и фильтры переходят от идентификаторов с одним выбором к идентификаторам с множественным выбором на четырех различных фильтрах.

Curent JSON:

'{
"ProductGroupID":1,
"TerminalID":1,
"CarrierID":1221,
"RegionID":21,
"DriverDateFilter":0,
"DriverStartDate":"0001-01-01T00:00:00",
"DriverEndDate":"0001-01-01T00:00:00"
}';

Где вы видите "TerminalID":1, я хотел бы изменить его на "TerminalID":[1], чтобы мы не нарушали никаких настроек пользователя при обновлении. К сожалению, я не могу понять, как создать массив int с JSON_MODIFY. Я почти на месте, но он упаковывает значение, которое я сохраняю в кавычки, и это не будет анализироваться в массиве int во время десериализация.

Я никогда раньше не работал с json непосредственно в sql, и мне, должно быть, не хватает чего-то простого. Как мне это исправить? Если невозможно перезаписать существующую запись, я мог бы также создать новую запись TerminalID для анализа и удаления старой.

Конечная цель - сделать это для каждой записи в таблице, один раз для каждой из четыре поля.

1 Ответ

1 голос
/ 27 апреля 2020
declare @j nvarchar(max) = N'{"ProductGroupID":1,"TerminalID":1,"CarrierID":1221,"RegionID":21,"DriverDateFilter":0,"DriverStartDate":"0001-01-01T00:00:00","DriverEndDate":"0001-01-01T00:00:00"}';
select @j = json_modify(@j, '$.TerminalID', json_query(concat('[', json_value(@j, '$.TerminalID') ,']')));
select @j;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...