Datenbank durchsuchen

Squicky

Lt. Commander
Registriert
Sep. 2002
Beiträge
1.431
Hallo

Wie kann man eine ganze Datenbank nach einer Zahl durch suchen.
Dabei kann die Zahl in allen Datentypen gespeichert werden INT, FLOAT, VARCHAR, TEXT, ....

Es sollen alle Tabellen und Spalten einer Datenbank durchsucht werden. Dabei müsste die Zahl immer auf den Spaltentyp konvertiert werden und bei Zeichenketten und Texten mit dem LIKE Befehl verglichen werden. Denn in einem Text, könnte die Zahl mitten im Text vorkommen.
Es sollte die Tabelle mit Spalte zurückkommen.
Leider geht mein SQL Wissen nicht über eine select und update Befehle nicht hinaus.
Mir ist bewusst, dass eine solche suche sehr lange dauern kann.
Danke für eure Hilfe.

Es wird Mirocosft SQL 2008 benutzt.

Gruß
Squicky
 
Sicher, aber nicht einfach überall

Select * from Tabelle where Tabelle.Spalte = 100.29

Suche also in Tablle wo der Wert in der Spalte = 100,29 ist. Du musst also nur noch wissen wo dein Wert gespeichert wird, den du suchst
 
tRITON schrieb:
Du musst also nur noch wissen wo dein Wert gespeichert wird, den du suchst

Super Witz.

Wenn ich diese Inforamtion hätte, dann bräuchte ich eure Hilfe nicht.
Deshalb suche ich eine möglichkeit eine ganze Datenbank und nicht nur eine Tabelle oder Spalte zu druchsuchen!

Squicky schrieb:
Es sollte die Tabelle mit Spalte zurückkommen.
 
Mit MSSQL Server kenne ich mich leider nicht aus, aber das Vorgehen ist ja überall gleich.
Man sucht sich über das Dictionary bzw. die Metadata-Informationen heraus, welche Tabellen es gibt, dazu die Spalten und die Datentypen der Spalten. Danach strickt man sich dynamisch (Dynamic SQL) Abfragen nach dem Schema "select count(*) from tabelle where spalte = wert" für alle Tabellen und Spalten und lässt das nacheinander laufen.
Die Metadaten-Views bei MSSQL kann man folgendermaßen abfragen:

SELECT * FROM INFORMATION_SCHEMA.TABLES;
SELECT * FROM INFORMATION_SCHEMA.COLUMNS;
 
Danke MistaJack

Wie ist jetzt der richtig Ansatz um diese zwei Rückgaben mit zwei Schleifen zu durchlaufen?
 
Das machst du am besten in der Sprache, die die Abfrage absetzt. Also PHP, C#, Java, oder was du eben verwendest.
 
Oder du loggest einfach die SQL Befehle auf dem Server mit.


Du startest deine Application und schaust dann einfach, was an die Datenbank gesendet wird.

Hast du MS-SQL 2008 Server laufen oder eine Deskop Version? Schau mal nach "sql server profiler". Sollte auf deinem Server installiert.
 
Zuletzt bearbeitet:
Hallo

Ich bin schon ein gutes Stück weiter.
Ich habe aber noch zwei Fragen:

Ich durchlaufe alle Tabellen und Spalten mit der "DECLARE CURSOR" und "fetch next" Möglichkeit. Man/Ich sehe diese Lösung als eine Schleife, die bei jedem Durchlauf eine Spalte von einer Tabelle nach dem gesuchten Wert prüft. Dabei wird immer eine Tabelle mit zwei Spalten (Tabelle, Spalte) zurückgegeben. Fall der gesucht Wert gefunden wurde, hat die Tabelle einen Zeile als inhalt, sonst wird eine leere Spalte zurückgegeben.
Dies war sehr nachteilig, denn ich musste dann mehrere 1000 Tabellen durchscrollen. Wobei die meisten leer waren.
Ist es möglich, dass alle "DECLARE CURSOR" und "fetch next" Durchläufe ihre Daten in eine Ergebnistabelle schreiben?
Die Rückgabewerte sollen nicht in eine echte Tabelle geschrieben werden.


like für XML:
Mit "like" kann man varchar oder text Spalten nach einer bestimmen Zeichenkette durchsuchen ( ... where Spalte like '%text%').
Gibt es einen solchen like Befehl für Spalten vom Typ XML ?

Danke
 
Nochmal: Mach das doch über die Sprache, mit der du die Ergebnisse darstellst.
 
Es gibt keine Sprach.
Es wird in / per SQL gemacht!
 
hm. Muss aber trotzdem gehen. Du bekommst die Ergebnisse ja zeilenweise zurück. Kannst du das nicht mit einem Insert umklammern?

Ansonsten schreib dir doch grad nen kleinen PHP-Tool. Das geht bestimmt schneller als den perfekten SQL-Ausdruck zu finden.
 
Zurück
Oben