Как сгенерировать JSON в SQL Server 2008 и вставить в другую таблицу - PullRequest
1 голос
/ 14 апреля 2019

Я работаю на SQL Server 2008. Мне нужно сгенерировать данные json из таблицы customer и вставить в таблицу CustomerJSON.SQL Server 2016 имеет встроенные возможности JSON, но, к сожалению, мне приходится работать только с SQL Server 2008.

Я использовал следующие операторы SQL:

Insert into CustomerJSON (Email, CustomerData)
    select 
        Email, 
        stuff((select ',' + '{"email":' + email + 
                      ',"firstName":"' + FirstName + '"' +
                      ',"lastName":"' + LastName + '"' +
                      ',"phoneNumber":"' + PhoneNumber+ '"' +'}'
               from Customer
               for xml path('')), 1, 1, '') 
    from  
        Customer

Как вы можете видеть на скриншоте, сгенерированный JSON содержит данные всех четырех строк.Однако я хочу, чтобы JSON создавался из каждой строки таблицы Customer, а не объединял все.Для справки я использовал SQL Server ВЫБЕРИТЕ в функцию JSON

enter image description here

1 Ответ

2 голосов
/ 14 апреля 2019

Вы можете использовать:

Insert into CustomerJSON (Email, CustomerData)
select Email , STUFF((
    select ',' + 
        '{"email":' + email
        + ',"firstName":"' + FirstName + '"'
        + ',"lastName":"' + LastName + '"'
        + ',"phoneNumber":"' + LastName + '"'
        +'}'

    from Customer c2
    where c2.Customerid = c.Customerid   -- correlation
    for xml path('')),1,1,'') 
from  Customer c;

Если CustomerId - это PK (скорее всего), вам не нужен STUFF and FOR XML, а просто concat с + и обработка столбцов, допускающих обнуление, с ISNULL:

Insert into CustomerJSON (Email, CustomerData)
select Email , 
        '{"email":' + email 
        + ',"firstName":"' + FirstName + '"'
        + ',"lastName":"' + LastName + '"'
        + ',"phoneNumber":"' + LastName + '"'
        +'}'
from  Customer c;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...