SQL Server 2016, estou tentando trabalhar com alguns dados regulares e retornar um objeto JSON para processamento por outro sistema. O outro sistema não reconhece o wrapper de matriz e, portanto, estou tentando usar WITHOUT_ARRAY_WRAPPER para me livrar disso. Quando usado em uma subconsulta, resultados ímpares são retornados...
SELECT @@SERVERNAME AS [Servername],
( SELECT [Name], [Recovery_Model_Desc]
FROM sys.databases
WHERE name in ('master', 'model', 'msdb')
FOR JSON PATH
) AS d
FOR JSON PATH, ROOT('ServerInformation')
Isso produz os dados esperados, com o wrapper do array...
{"ServerInformation":[{"Servername":"MyServer","d":[{"Name":"master","Recovery_Model_Desc":"SIMPLE"},{"Name":"model","Recovery_Model_Desc" :"COMPLETO"},{"Nome":"msdb","Recovery_Model_Desc":"SIMPLE"}]}]}
No entanto, WITHOUT_ARRAY_WRAPPER produz...
SELECT @@SERVERNAME AS [Servername],
( SELECT [Name], [Recovery_Model_Desc]
FROM sys.databases
WHERE name in ('master', 'model', 'msdb')
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
) AS d
FOR JSON PATH, ROOT('ServerInformation')
{"ServerInformation":[{"Servername":"MyServer","d":"{\"Name\":\"master\",\"Recovery_Model_Desc\":\"SIMPLE\"},{\"Name \":\"model\",\"Recovery_Model_Desc\":\"FULL\"},{\"Name\":\"msdb\",\"Recovery_Model_Desc\":\"SIMPLE\"}"}] }
considerando que eu esperaria que produzisse
{"ServerInformation":{"Servername":"MyServer","d":{"Name":"master","Recovery_Model_Desc":"SIMPLE"},{"Name":"model","Recovery_Model_Desc":" COMPLETO"},{"Nome":"msdb","Recovery_Model_Desc":"SIMPLE"}}}
Bug ou resultados esperados?
Editar: ajuste os resultados esperados
use json_query,
Há uma postagem no blog quando o recurso foi introduzido que diz:
A postagem em si é um pouco confusa e quebrada, mas minha leitura é que ela deve ser usada apenas para um resultado de linha única e, portanto, o JSON aninhado será tratado como uma string.