Когда-то существовала одна строка данных (значительно упрощенная, фактические данные json составляют 10 КБ +), таким образом:
ID, json
1, '{
"a1.arr": [1,2,3],
"a1.boo": true,
"a1.str": "hello",
"a1.num": 123
}'
Процесс должен был написать еще одну запись с преимущественно другими данными:
ID, json
2, '{
"a1.arr": [1,2,3], //from ID 1
"a2.arr": [4,5,6], //new (and so are all below)
"a2.boo": false,
"a2.str": "goodbye",
"a2.num": 456
}'
Но из-за какой-то внешней ошибки исходный набор json из идентификатора 1 также оказался представлен в идентификаторе 2, поэтому теперь таблица выглядит так:
ID, json
1, '{
"a1.arr": [1,2,3],
"a1.boo": true,
"a1.str": "hello",
"a1.num": 123
}'
2, '{
"a1.arr": [1,2,3],
"a1.boo": true, //extraneous
"a1.str": "hello", //extraneous
"a1.num": 123, //extraneous
"a2.arr": [4,5,6],
"a2.boo": false,
"a2.str": "goodbye",
"a2.num": 456
}'
Я хотел бы знать, есть ли способ удалить посторонние строки из записи ID 2.
Я считаю, что вся строка JSON из ID 1 представлена в ID 2 как непрерывный блок, поэтому замена строки может сработать, но есть вероятность, что произошло некоторое переупорядочение. Немного запутался с элементом, который должен остаться, хотя
Существует также вероятность того, что некоторые значения узлов a1. * Были немного изменены (я не делал различий), но я рад использовать только имена узлов, а не их значения, при оценке того, узел должен быть удален. Один из узлов (a1.arr
) должен храниться в ID 2. Следовательно, набор результатов должен выглядеть следующим образом:
ID, json
1, '{
"a1.arr": [1,2,3],
"a1.boo": true,
"a1.str": "hello",
"a1.num": 123
}'
2, '{
"a1.arr": [1,2,3],
"a2.arr": [4,5,6],
"a2.boo": false,
"a2.str": "goodbye",
"a2.num": 456
}'
Я начал играть с https://dba.stackexchange.com/questions/168303/can-sql-server-2016-extract-node-names-from-json, чтобы получить список имен узлов из идентификатора 1, который я хочу удалить из идентификатора 2, но я не уверен, как мне затем удалить их из JSON идентификатора 2 - предположительно последовательность десериализации, редукции и повторной сериализации?