Verbesserte SQL Server-Abfrage zum Konvertieren einer beliebigen Tabelle in JSON

8

Nach vielen Suchen und Zusammenfügen der sehr guten Techniken zum Konvertieren von Ergebnismengen mit den Befehlen FOR XML und .nodes (), die sich im Web befinden, konnte ich diese einzige Abfrage erstellen (keine gespeicherte Prozedur), die macht eine ziemlich gute Arbeit, jede beliebige SQL-Abfrage in ein JSON-Array umzuwandeln.

Die Abfrage codiert jede Datenzeile als einzelnes JSON-Objekt mit einem führenden Komma. Die Datenzeilen werden in eckige Klammern gesetzt und die gesamte Ergebnismenge wird dann in eine Datei exportiert.

Ich würde gerne sehen, ob jemand da draußen Wege finden kann, um seine Leistung zu verbessern?

Hier ist die Abfrage mit einer Beispieltabelle:

%Vor%

Meine größte Kritik ist, dass es wahnsinnig langsam ist.
Es dauert derzeit etwa 3:30 für ~ 42.000 Zeilen.

Meine andere große Kritik ist, dass es derzeit davon ausgeht, dass alles, was wie eine Zahl aussieht, eine Nummer ist. Es wird nicht versucht, den Spaltentyp am wenigsten zu entdecken (und ich bin mir nicht einmal sicher, ob das möglich ist).

Eine letzte kleine Kritik ist, dass die erste Datenzeile ein Komma vorne hat und technisch nicht sollte. Um dies zu kompensieren, benötigt man ein leeres JSON-Objekt in der ersten Zeile, die das JSON-Array startet.

Andere Kritiken (vorzugsweise mit Lösungen) eingeladen, die einzige wirkliche Einschränkung, die ich habe, ist, dass die Lösung in vielen beliebigen SQL-Abfragen ordentlich wiederholbar ist, ohne die Spaltennamen explizit identifizieren zu müssen.

Ich verwende SQL Server 2012.

Danke und an alle anderen wie mich, die nach einem verallgemeinerten SQL-Ergebnis gesucht haben - & gt; JSON Array-Konverter, GENIESSEN!

    
Mike Fair 13.02.2013, 23:26
quelle

2 Antworten

11

Ich sage, wenn Sie wirklich Leistung steigern wollen, verwenden Sie Metaprogrammierung. Das Beispiel unten versucht dies mit 40.000 Zeilen und gibt Ergebnisse in weniger als einer Sekunde zurück (ohne die ersten 40.000 Zeilen einzufügen, was in diesem Beispiel nur etwa 2 Sekunden dauert). Es berücksichtigt auch Ihre Datentypen, um Zahlen nicht in Anführungszeichen zu setzen.

%Vor%     
pyrospade 14.02.2013, 04:32
quelle
1

Von Firoz Ansari :

%Vor%     
hd1 14.02.2013 04:36
quelle

Tags und Links