使用FOR JSON子句获取多行

ize*_*god 7 sql-server sql-server-2016

使用PostgreSQL我可以拥有多行json对象.

select (select ROW_TO_JSON(_) from (select c.name, c.age) as _) as jsonresult from employee as c
Run Code Online (Sandbox Code Playgroud)

这给了我这个结果:

{"age":65,"name":"NAME"}
{"age":21,"name":"SURNAME"}
Run Code Online (Sandbox Code Playgroud)

但是在SqlServer中,当我使用FOR JSON AUTO子句时,它为我提供了一个json对象数组,而不是多行.

select c.name, c.age from customer c FOR JSON AUTO

[{"age":65,"name":"NAME"},{"age":21,"name":"SURNAME"}]
Run Code Online (Sandbox Code Playgroud)

如何在SqlServer中获得相同的结果格式?

Jer*_*ert 19

通过在每个单独的行中构建单独的JSON:

SELECT (SELECT [age], [name] FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)
FROM customer
Run Code Online (Sandbox Code Playgroud)

有一种替代形式,不需要您知道表结构(但可能性能较差,因为它可能会生成一个大的中间JSON):

SELECT [value] FROM OPENJSON(
    (SELECT * FROM customer FOR JSON PATH)
)
Run Code Online (Sandbox Code Playgroud)


小智 8

无结构更好的性能

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)
Run Code Online (Sandbox Code Playgroud)