Используя 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?

9
izengod 24 Апр 2017 в 14:51

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)
)
23
Jeroen Mostert 16 Июн 2017 в 07:30

Нет структуры лучше производительность

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)
4
Nenad Zivkovic 30 Сен 2019 в 09:12