Baixei e instalei o SQL Server 2016 Community Technology Preview 2.3, que, se bem entendi, deve conter uma função interna chamada JSON_VALUE
. (Atualização: o CTP 2.4 foi enviado e nenhuma menção é feita aos novos recursos JSON ainda)
Começando com os recursos JSON que já funcionam, o " ... FOR JSON AUTO
" pode ser especificado na minha SELECT
declaração, assim:
SELECT [ID], [DATA] FROM [dbo].[JSONDEMO] FOR JSON AUTO
O resultado da minha consulta de demonstração acima será um conjunto de resultados com uma coluna, com algum nome gerado automaticamente JSON_F123123123
e o valor no formato JSON, algo como:
[{"ID":"IDVALUE", "DATA":"{ {name:'ramsoft', id:1234}, ... }", ... }]
Até aí tudo bem, mas se DATA
contivesse dados JSON, você receberia um documento JSON contendo um literal de string de dados, mesmo que esse literal de string fosse um JSON válido. O que você provavelmente queria, ou melhor, o que eu queria, é:
[{"ID":"IDVALUE", "DATA":{ {name:'ramsoft', id:1234}, ... }, ... }]
De acordo com algumas postagens do MS Blog, para obter o valor JSON como um valor JSON em vez de uma VARCHAR(n)
string, você deve escrever:
SELECT [ID], JSON_VALUE(D.DATA,'$') DATA
FROM [dbo].[JSONDEMO] D FOR JSON AUTO
Isso não funciona, recebo um erro:
'JSON_VALUE' is not a recognized built-in function name.
Algum tipo de extração de valor JSON está disponível no CTP 2.3 ou não existirá até o CTP 3?
Você precisará aguardar o CTP 3 para usar coisas como
OPENJSON
eJSON_VALUE
. Essas construções simplesmente não foram enviadas nos CTPs até e incluindo o CTP 2.4. Isso não significa que não haja alguma maneira de obter o resultado desejado agora, mas a quantidade de tempo e esforço que você pode gastar fazendo isso provavelmente não vale a pena, especialmente se a funcionalidade de que você precisa estiver disponível no próximo CTP, que deve ser lançado em breve.