SQL Einen Wert in einer Tabelle finden ohne Kenntnis der Spalte

  • SQL

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    SQL Einen Wert in einer Tabelle finden ohne Kenntnis der Spalte

    Hallo zusammen,
    ich versuche meine ersten Gehversuche mit SQL und scheitere an folgenden Problem.
    Wie finde ich einen Stringin einer Tabelle ohne Kenntnis der Spalte
    Hier ist mein Versuch:

    select * from USE001 where "Suchstring"

    Im Netz finde ich nur Beispiele, inden die Spalte bekannt ist.
    Bevor jmd fragt, es ist nicht meine DB. Ich versuche mich nur in der Struktur zurecht zu finden.


    Hat jmd ein Tipp für ein Einsteigerbuch SQL?

    schon einmal vielen Dank

    Verschoben. ~Trade

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

    Ohne zu Wissen welche Spalte richtig ist, wird's schwer... Hab mich auch schon in fremde DBs einarbeiten müssen. Hilft alles nix, da muss man durch.

    Ansonsten einfach die ganze Tabelle in eine DataTable laden und dort per Schleife alle Spalten und Zeilen durchgehen und Werte Vergleichen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Pinot schrieb:

    ersten Gehversuche mit SQL
    ...
    Wie finde ich einen Stringin einer Tabelle ohne Kenntnis der Spalte
    ich wüsste nicht, wie das mit Sql gehen sollte.
    Naja, vlt. mit StoredProcedures innerhalb der Datenbank, welche sich dann Spalten-Infos aus der SystemDatenbank holen...

    Aber das ist sicher sicher nichts für erste Gehversuche, und höchstwahrscheinlich hast du eh keine Rechte dafür, bei einer Db, die dir vorgegeben ist.

    Pinot schrieb:

    Bevor jmd fragt, Ich versuche mich nur in der Struktur zurecht zu finden.
    Dann besorg dir die Dokumentation oder zumindest das Schema der Db.
    Je nach Datenbanksystem gibts verschiedene Admin-Tools, mit denen man die Struktur einer Db untersucht.
    Da guckt man dann nach, wie die Tabellen heissen, welche Spalten, welche Relationen, welchen Datentyp die Spalten haben - halt die Infos, die man braucht, um vernünftiges Sql zu formulieren.


    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Ich schätze für so ne grobe Aufgabe eignet sich eine sehr grobe Methode:
    Lade die Tabelle in eine DataTable, gehe die Rows mit ForEach durch, und prüfe alle Spalten einer Row auf den String.

    Alternativ und etwas Performanter biste dann noch mit nem DataReader unterwegs, das Prinzip bleibt das gleiche:
    Den Reader mit While durchlaufen, und von jeder Row das ItemArray nach dem Wert durchsuchen.

    Aber wie kommts, dass absolut nichts von einer Tabelle bekannt ist?
    Morgen zusammen,
    danke für die Antworten. Ich hatte schon befürchtet, das ich alle Spalten einer Tabelle einzeln durchgehen muss.
    Die Datenbank, in der ich mich jetzt bewege, ist nur eine Kopie unserer Arbeitsdatenbank, einfach aus dem Grund, damit ich mir beim Üben nichts zerschieße. ^^

    Es handelt sich um eine Kopie unserer LIMS Datenbank mit aktuell 440 Tabellen und insgesamt ca. 4700 Spalten. Zu unseren Aufgaben gehört die Pflege dieser Datenbank. Dazu benutzen wir die entsprechenden vom Hersteller bereitgestellten Tools. Ich versuche nur mich etwas tiefer einzuarbeiten, unter anderen auch deshalb weil diese Tools sehr langsam sind.

    Jetzt habe ich direkt drei weitere Fragen zu diesen Thema:
    1) Zum Füllen einer Datatable benutze ich den OdbcDataAdapter. Bei bisher einer Tabellen bekomme ich die Meldung,
    das bestimmte Parameter eine nicht darstellbare DateTime beschreiben. Wie kann ich das denn umgehen?

    2) Manche Tabellen sind dermaßen groß, das das Befüllen der Datatable mit der Ergebnissn der Abfrage von "select *" zu einem "Einfrieren" des Programm führt. Wie kann man das verhindern? Ausser die Abfrage näher zu spezifizieren fällt mir nichts ein.

    3) Diese Frage zeigt wahrscheinlich, wie wenig Ahnung ich habe:
    Ich habe mir mit Verbindung.getschema (column) die Liste aller Tabellen und deren Spalten gezogen. (Beim Code habe ich mich an einem Beispiel vom ErfinderDesRades orientiert)
    Wenn ich jetzt meine Schleife laufen lasse öffne ich meine Verbindung zur Datenbank einmal am Anfang und schließe am Ende oder öffne und schließe ich die Verbindung im jeden Schritt?

    Vielen Dank
    Wenn das doch eh eure DB ist, dann lass sie dir erklären. Die eigene DB sollte man kennen wie die eigene Westentasch! Alle Spalten und Zeilen per Schleife durch zu gehen ist jetzt auch nicht die performanteste Lösung.

    1) Kenn ich nicht
    2) Schau dir Threading.Tasks.Task an.
    3) Verbindung schließen, wenn alle Daten da sind.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    zu 2)
    Threading ist nur der allerletzte Not-Anker. Wenns irgend geht sieh zu, dass deine Abfragen nicht mehr Daten transportieren, als ein Mensch auch sinnvoll lesen kann (also deine bisherige Idee beschreibt schon den Königsweg).
    Und wenn das dann schnell genug ist, lass das Threading einfach bleiben, weil es macht Dinge komplizierter.
    Wenn Threading, dann mittels des Async/Await - Patterns - nichts anderes (von dem es leider haufenweise gibt)