Преобразуйте свойства из массива JSON в строку, разделенную запятыми

#sql #json #azure #sql-server-2012

Вопрос:

У меня есть строковый столбец в таблице SQL-сервера в Azure, который содержит следующие данные:

  {
        "status": "success",
        "data": [
            {
                "name": "Jane",
                "type": 0
            },
            {
                "name": "John",
                "type": 0
            }
        ]
    }
 

Как его можно преобразовать в строку, разделенную запятыми, содержащую "Jane, John" ?

Комментарии:

1. "data" Всегда будет одного и того же размера? Например, всегда ли это будут два элемента или вам нужно, чтобы они были динамичными?

2. Привет, «данные» не имеют постоянного размера, они должны быть динамичными.

Ответ №1:

Вот как этого добиться с помощью фрагмента моего старого кода, вы должны иметь возможность просматривать таблицу и делать это для каждой строки. Возможно, есть более быстрый способ сделать это, но это сработает.

 DECLARE @JSON NVARCHAR(200) = '{"status": "success", "data": [{"name": "Jane", "type": 0},{"name": "John", "type": 0}]}',
    @result nvarchar(max) = ''


SELECT @result = @result   [value]   N', '
FROM (
    SELECT DISTINCT data.value
    FROM OPENJSON(@JSON, '$.data') as jsondata
    CROSS APPLY OPENJSON(jsondata.value) as data
    WHERE data.[key] = 'name') a

select @result = substring(@result, 1, (LEN(@result)-1))

select @result