2017-10-18 2 views
0

requête suivante retourne table entière comme seule chaîne JSON (liste des objets JSON - un par ligne):Comment convertir des lignes en JSON dans une requête TSQL select?

SELECT * FROM MyTable FOR JSON AUTO 

je dois retourner plusieurs lignes où chaque ligne sera une chaîne JSON d'une ligne signle de la table .

Par exemple, si les champs de table sont A, B, sortie C doit être:

{A: <value>, B: <value>, C: <value>} 
{A: <value>, B: <value>, C: <value>} 
{A: <value>, B: <value>, C: <value>} 
... 
{A: <value>, B: <value>, C: <value>} 

Comment faire cela dans TSQL?

Bien qu'il soit possible de construire des chaînes JSON à la main en concaténant des chaînes, je préférerais réutiliser un outil existant qui gérerait des cas comme des guillemets dans des valeurs.

+0

Utilisez-vous SQL Server 2016? –

Répondre

0

Cela retournera les données json dans les lignes d'une instruction select.

DECLARE @json NVARCHAR(Max) 
SET @json = (SELECT * FROM [Sales].[Customers] FOR JSON PATH, ROOT('data')) 
SELECT value 
FROM OPENJSON(@json,'$.data'); 
+0

Openjson est disponible uniquement dans SQL Server 2016, https: //docs.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql –

+0

Pour JSON AUTO a également démarré en 2016. https://docs.microsoft.com/en-us/sql/relational-databases/json/format-json-output-automatically-with-auto-mode-sql-server. –

+0

vous aussi n'a jamais spécifié une version –

0

Vous pouvez l'essayer.

SELECT JTBL.* FROM MyTable A 
CROSS APPLY (select A, B, C from MyTable B WHERE B.ID = A.ID FOR JSON AUTO) JTBL (JSTXT)