Gibt es eine Möglichkeit, parser eine SQL-Abfrage, um ziehen Sie die Spaltennamen und Tabellennamen?

StackOverflow https://stackoverflow.com/questions/56677

  •  09-06-2019
  •  | 
  •  

Frage

Ich habe 150+ SQL-Abfragen in getrennten text-Dateien, die ich analysieren muss, um (nur die eigentlichen SQL-code, nicht die Daten), um zu ermitteln, alle Spaltennamen und Tabellennamen verwendet.Vorzugsweise mit der Anzahl der Male, die jede Spalte und Tabelle in Erscheinung.Schreiben Sie eine Marke neue SQL-parsing-Programm ist kniffliger als es scheint, mit geschachtelten SELECT-Anweisungen und dergleichen.

Gibt es ein Programm oder code gibt, der dies tut (oder etwas in der Nähe), aber ich habe es nicht gefunden.

War es hilfreich?

Lösung

Ich landete tatsächlich ein Werkzeug bis namens SQL Pretty Printer . Sie können eine Desktop-Version erwerben, aber ich habe einfach die kostenlose Online-Anwendung. Kopieren Sie einfach die Abfrage in das Textfeld ein, stellen Sie die Ausgabe auf „Liste DB-Objekt“ und klicken Sie auf das Format SQL-Taste.

Es funktioniert großartig mit rund 150 verschiedenen (und komplexen) SQL-Abfragen.

Andere Tipps

Wie wäre es den Ausführungsplan Bericht in MS SQLServer verwenden? Sie können diese in eine XML-Datei speichern, die dann analysiert werden können.

Sie möchten vielleicht etwas zu suchen:

JSqlParser

, die JavaCC verwendet den Query-String als Objekt Diagramm zu analysieren und zurück. Ich habe es nie benutzt, so kann ich nicht für seine Qualität bürgen.

Wenn Sie Anwendung sind muss es tun, und hat Zugriff auf eine Datenbank, die die Tabellen hat etc, man könnte so etwas wie laufen:

SELECT TOP 0 * FROM MY_TABLE

Mit ADO.NET. Dies würde Ihnen eine Datatable-Instanz geben, für die Sie die Spalten und deren Attribute abfragen können.

Bitte gehen Sie mit antlr ... eine Grammatik schreiben n folgen die steps..which in antlr gegeben site..eventually werden Sie AST (Pseudo-Syntaxbaum) erhalten. Für die gegebene Abfrage ... können wir durch diese durchqueren und alle Tisch bringen, Spalte, die in der Abfrage vorhanden ist ..

In DB2 können Sie Ihre Abfrage mit etwas wie die folgenden anhängen, aber 1 ist das Minimum Sie angeben können; es wird einen Fehler auslösen, wenn Sie versuchen, 0 angeben:

FETCH FIRST 1 ROW ONLY

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top