web-dev-qa-db-fra.com

Alternative à "FOR JSON" dans SQL Server 2012?

Dans SQL Server 2016, je peux générer des résultats de requête sous la forme JSON comme décrit dans la documentation Formater les résultats de la requête en JSON avec FOR JSON (SQL Server)

SELECT * 
FROM x 
FOR JSON PATH

Mais je constate que cela n'est pas pris en charge dans SQL Server 2012.

Existe-t-il un moyen intégré de convertir des données tabulaires en données JSON dans SQL Server 2012?

Pour rendre cette compatibilité croisée, j'aimerais idéalement pouvoir utiliser for json path dans SQL Server 2012.

2
Zach Smith

Dans SQL Server 2012, vous pouvez utiliser FOR XML. Pour mon cas, c'était une alternative viable à JSON, car je passais juste la chaîne à un navigateur.

1
Zach Smith

La prise en charge de JSON était nouvelle dans SQL Server 2016.

Si vous souhaitez convertir des données en JSON, vous avez quelques options:

  • Récupérez les lignes comme vous le feriez pour tout autre résultat de requête et convertissez-les dans le niveau application (comme C #, Java, etc.)
  • Construisez une logique T-SQL dans une procédure ou une fonction stockée pour la convertir vous-même en JSON (mais gardez à l'esprit que vous ne pourrez pas utiliser "FOR JSON PATH" exactement de la même manière que 2016)
  • Construisez la logique CLR pour le faire (encore une fois, ne sera pas compatible avec "FOR JSON PATH")
5
Brent Ozar

Réponse wiki communautaire :

Vous pouvez jouer avec cela mais changer la mise en forme de votre JSON. Cela stocke tous les résultats en un seul élément:

$server = 'Test'
$mainquery = sqlcmd -E -S $server -Q "set nocount on; select name,database_id,compatibility_level from sys.databases" -m 10 -h-1 
$mainquery | convertto-json #-Depth 3

Alternativement, vous pouvez créer vos propres fonctions comme décrit dans Produire des documents JSON à partir de requêtes SQL Server via TSQL par Phil Factor.

0
user126897