Я не думаю, что вы можете сгенерировать JSON вывод с именами ключей переменных, используя FOR JSON AUTO
или FOR JSON PATH
, но если вы можете обновить до SQL Server 2017, следующий подход, который использует только JSON встроенная поддержка, возможен вариант:
Таблица:
CREATE TABLE Data (
Id varchar(2),
Customer varchar(50),
Product varchar(50),
[Date] date,
[Count] int
)
INSERT INTO Data
(Id, Customer, Product, [Date], [Count])
VALUES
('A1', 'Walmart', 'Widget', '20200101', 5),
('B2', 'Amazon', 'Thingy', '20200102', 10),
('C3', 'Target', 'Gadget', '20200201', 7)
Заявление:
DECLARE @json nvarchar(max) = N'{}'
SELECT @json = JSON_MODIFY(
@json,
CONCAT(N'$."', ID, N'"'),
JSON_QUERY((SELECT Customer, Product, [Date], [Count] FOR JSON PATH, WITHOUT_ARRAY_WRAPPER))
)
FROM Data
SELECT @json
Результат:
{"A1":{"Customer":"Walmart","Product":"Widget","Date":"2020-01-01","Count":5},"B2":{"Customer":"Amazon","Product":"Thingy","Date":"2020-01-02","Count":10},"C3":{"Customer":"Target","Product":"Gadget","Date":"2020-02-01","Count":7}}
Примечания:
Использование переменной или выражения вместо значения для параметра path
в JSON_MODIFY()
доступно в SQL Server 2017+. JSON_QUERY()
используется для предотвращения экранирования специальных символов.