Comment faire JSON à partir d'une requête SQL dans microsoft SQL 2014
Question: Quelle est la meilleure solution pour générer du JSON à partir d'une requête SQL dans microsoft SQL 2014? J'ai créé une procédure, mais elle est très lente.
Mon Exemple:
DECLARE @customers xml;
DECLARE @json NVARCHAR(max);
SET @customers = (SELECT * FROM dbo.Customers FOR XML path, root)
EXEC [dbo].[HTTP_JSON] @customers, @json
EXEC [dbo].[HTTP_JSON](@Shopping)
Create PROCEDURE [dbo].[HTTP_JSON]
@parameters xml, @response NVARCHAR(max) OUTPUT
WITH EXEC AS CALLER
AS
set @response = (SELECT Stuff(
(SELECT * from
(SELECT ',
{'+
Stuff((SELECT ',"'+coalesce(b.c.value('local-name(.)', 'NVARCHAR(MAX)'),'')+'":"'+
b.c.value('text()[1]','NVARCHAR(MAX)') +'"'
from x.a.nodes('*') b(c)
for xml path(''),TYPE).value('(./text())[1]','NVARCHAR(MAX)')
,1,1,'')+'}'
from @parameters.nodes('/root/*') x(a)
) JSON(theLine)
for xml path(''),TYPE).value('.','NVARCHAR(MAX)' )
,1,1,''))
GO
Avec SQL Server 2016, est originaire de la prise en charge de JSON... Pour cette question, vous ne donnez pas assez de détails: s'il vous Plaît montrer votre entrée. Donner un exemple de
@parameters
et fournir le résultat attendu (exemple d'un JSON valide construit avec les données réelles de @parameters
)OriginalL'auteur Joachim Langezaal | 2016-10-05
Vous devez vous connecter pour publier un commentaire.
Juste pour le fun, j'ai créé une fonction scalaire basé hors de ma précédente réponse.
À part bien évidemment paramètre XML, j'ai ajouté deux autres: 1) Inclure l'en-Tête (illustré ci-dessous), et 2) ToLower cas (je préfère mon champ JSON noms en minuscules que des liens vers mes classes et tel).
Si la requête est plus qu'un disque, d'une formaté sera retourné.
Retourne
Ou même plus simplement
Retourne avec en-Tête SUR
Retourne l'en-Tête Large de
L'UDF
**EDIT - correction de Faute de frappe
as
clé . Requête :Select JSON=[dbo].[udf-Str-JSON](0,1,(Select 1 as ID,* From ColourGroup for XML RAW))
Intéressant. Je n'utilise jamais, mais il devrait fonctionner si vous Sélectionnez l'id=1,* à partir de ColourGroup fpr XML BRUT
En utilisant les données de l'échantillon ci-dessus COMME semble fonctionner Sélectionnez JSON=[dbo].[svf-Str-JSON](0,1,(1 Sélectionnez qu'une pièce d'identité,* De (à)Table Pour XML Raw))
J'ai déjà essayé les deux façons. tout est travail. mais seulement obtiens l'erreur de ces façons. Je ne sais pas pourquoi.
pas une erreur. Je suis de mieux en objet JSON au lieu Tableau JSON en utilisant
as
ouid=1
. @JohnOriginalL'auteur John Cappelletti
Les éléments suivants doivent créer le tableau JSON pour juste environ n'importe quel ensemble de données. Cependant, je n'ai pas créé un moyen de convertir peu à vrai/faux encore.
Juste un point à considérer: La PREMIÈRE colonne de la première SÉLECTIONNEZ doit être la Clé Primaire qui est équivaut à l'ENTITÉ de terrain. Dans ce cas,
Select * from @User for XML RAW
... ID est l'Entité et se trouve juste à être le premier champ dans la tableComme la mesure de la performance, de 500 enregistrements avec 19 champs crée une chaîne JSON 191,987 octets dans 0.694 secondes (50 enregistrements dans 0.098 secondes)
De considérer les éléments suivants:
Retourne
Une version plus lisible
cteEAV de façon dynamique unpivot les données et générer les suivantes:
cteBLD permettra de prolonger et d'ajouter des drapeaux Nouveau/Fin de Ligne
La Finale Sélectionnez
Ce sera de mettre tout cela ensemble et de générer une dernière chaîne de caractères qui peut être enroulé ou imbriqués comme vous s'il vous plaît.
OriginalL'auteur John Cappelletti