web-dev-qa-db-ja.com

FORJSON句を使用して複数の行を取得する

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で同じ結果形式を取得するにはどうすればよいですか?

8
izengod

個々の行ごとに個別のJSONを作成するには:

SELECT (SELECT [age], [name] FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)
FROM customer

テーブル構造を知る必要のない別の形式があります(ただし、大きな中間JSONが生成される可能性があるため、パフォーマンスが低下する可能性があります)。

SELECT [value] FROM OPENJSON(
    (SELECT * FROM customer FOR JSON PATH)
)
18
Jeroen Mostert

構造がなく、パフォーマンスが向上

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)
2
Barak Yellin