Используя PostgreSQL, я могу иметь несколько строк объектов json.
select (select ROW_TO_JSON(_) from (select c.name, c.age) as _) as jsonresult from employee as c
Это дает мне такой результат:
{"age":65,"name":"NAME"}
{"age":21,"name":"SURNAME"}
Но в SqlServer, когда я использую предложение FOR JSON AUTO, он дает мне массив объектов json вместо нескольких строк.
select c.name, c.age from customer c FOR JSON AUTO
[{"age":65,"name":"NAME"},{"age":21,"name":"SURNAME"}]
Как получить такой же формат результата в SqlServer?
2 ответа
Создавая отдельный JSON в каждой отдельной строке:
SELECT (SELECT [age], [name] FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)
FROM customer
Существует альтернативная форма, которая не требует, чтобы вы знали структуру таблицы (но, вероятно, имеет худшую производительность, потому что она может генерировать большой промежуточный JSON):
SELECT [value] FROM OPENJSON(
(SELECT * FROM customer FOR JSON PATH)
)
Нет структуры лучше производительность
SELECT c.id, jdata.*
FROM customer c
cross apply
(SELECT * FROM customer jc where jc.id = c.id FOR JSON PATH , WITHOUT_ARRAY_WRAPPER) jdata (jdata)
Новые вопросы
sql-server
Microsoft SQL Server - это система управления реляционными базами данных (RDBMS). Используйте этот тег для всех выпусков SQL Server, включая Compact, Express, Azure, Fast-track, APS (ранее PDW) и Azure SQL DW. Не используйте этот тег для других типов СУБД (MySQL, PostgreSQL, Oracle и т. Д.). Не используйте этот тег для проблем, связанных с разработкой программного обеспечения и мобильных устройств, если только он не связан напрямую с базой данных.