Как разделить строки на одну строку для каждого элемента в массиве JSON, хранящемся в столбце? - PullRequest
0 голосов
/ 17 марта 2020

Хорошо, это трудно объяснить, но я попробую. Google не помог мне, поэтому, пожалуйста, обновите этот вопрос, если он может помочь кому-то еще.

Фон

У меня есть таблица, Персоны , с некоторыми столбцами, такими как [ID], [Name] и [PhoneNumbers]. Таблица заполняется данными из сторонней системы, поэтому я не могу изменить способ вставки данных.

Столбец [PhoneNumbers] содержит массив чисел JSON, например:

{"phonenumbers":[]}

Сейчас я пытаюсь составить представление для этой таблицы с целью иметь по одной строке для каждого числа.

Вопрос

Могу ли я достичь это с использованием T- SQL и поддержка JSON? Я использую SQL Server 2016.

1 Ответ

1 голос
/ 17 марта 2020
declare @j nvarchar(max) = N'{"phonenumbers":["1a", "2b", "3c", "4", "5", "6", "7", "8", "9", "10x"]}';

select value, *
from openjson(@j, '$.phonenumbers');

declare @t table
(
id int identity,
phonenumbers nvarchar(max)
);

insert into @t(phonenumbers)
values(N'{"phonenumbers":["1a", "2b", "3c", "4d"]}'), (N'{"phonenumbers":["22", "23", "24", "25"]}'), (N'{"phonenumbers":[]}'), (NULL);

select id, j.value, j.[key]+1 as phone_no_ordinal, t.*
from @t as t
outer apply openjson(t.phonenumbers, '$.phonenumbers') as j;
...