Wie kann ich ein bestimmtes Zeichen in der gesamten SQL-Datenbank mit IBExpert suchen?
-
08-10-2019 - |
Frage
Wie kann ich etwas bestimmtes Zeichen auf die gesamte Datenbank mit IBExpert suchen?
Zum Beispiel:
Ich habe einige „'“ (') in einem Teil in den Daten der Tabellen und dies ist mir ein Fehler immer später, und ich habe viele Tabellen manuell suchen ... Wie kann ich es tun?
Thx
Lösung
Das Beste, was ich denken kann, ist, dass Sie Ihr eigenes Skript erzeugen kann und führen Sie es an die Datenbank. Fro dieser Fall isql (Befehl Textzeilen-Tool für Firebird) ist besser als IBExpert dies zu erreichen.
Also, erster Schritt ist, zu gehen und all Zeichen oder Varchar Spalten zu finden und eine benutzerdefinierte Abfrage für jedes Feld in jeder Tabelle zu konstruieren. Speichern Sie dieses Skript als create_search_script.sql im selben Verzeichnis wie die Datenbank (oder in einem beliebigen Verzeichnis, wenn Sie eine Verbindung zu einer Remote-Datenbank).
set heading off;
set blob off;
set width sql 400;
select '--tables with a primary key' from rdb$database;
select
trim(
cast(
'select '
||''''
||trim(rf.rdb$relation_name)
||''''
||', '
||(select list(trim(isg.rdb$field_name))
from rdb$index_segments isg
where isg.rdb$index_name = (select rc.rdb$index_name
from rdb$relation_constraints rc
where rc.rdb$relation_name = rf.rdb$relation_name
and rc.rdb$constraint_type = 'PRIMARY KEY'))
||', '
||trim(rf.rdb$field_name)
||' from '
||trim(rf.rdb$relation_name)
||' where '
||trim(rf.rdb$field_name)
||' like ''%''''%'';'
as varchar(2000))
) sql
from rdb$relation_fields rf
inner join rdb$relations r on r.rdb$relation_name = rf.rdb$relation_name
inner join rdb$fields f on f.rdb$field_name = rf.rdb$field_source
inner join rdb$types t on t.rdb$field_name = 'RDB$FIELD_TYPE' and t.rdb$type = f.rdb$field_type
where t.rdb$type_name = 'TEXT'
and coalesce(r.rdb$system_flag, 0) != 1
and exists (select 1
from rdb$relation_constraints rc
where rc.rdb$relation_name = rf.rdb$relation_name
and rc.rdb$constraint_type = 'PRIMARY KEY'
)
;
select '--tables without a primary key' from rdb$database;
select trim(
'select '
||''''
||trim(rf.rdb$relation_name)
||''''
||', tbl.*'
||' from '
||trim(rf.rdb$relation_name)
||' tbl where '
||trim(rf.rdb$field_name)
||' like ''%''''%'';'
) sql
from rdb$relation_fields rf
inner join rdb$relations r on r.rdb$relation_name = rf.rdb$relation_name
inner join rdb$fields f on f.rdb$field_name = rf.rdb$field_source
inner join rdb$types t on t.rdb$field_name = 'RDB$FIELD_TYPE' and t.rdb$type = f.rdb$field_type
where t.rdb$type_name = 'TEXT'
and coalesce(r.rdb$system_flag, 0) != 1
and not exists (select 1
from rdb$relation_constraints rc
where rc.rdb$relation_name = rf.rdb$relation_name
and rc.rdb$constraint_type = 'PRIMARY KEY'
)
;
beginnen nun, einen neuen Befehl Sitzung gehen (cd) in diesen Ordner und diese Befehle ausführen:
del search_results.txt
del search_script.sql
isql your-db.fdb -u sysdba -p masterkey -o search_script.sql -i create_search_script.sql
isql your-db.fdb -u sysdba -p masterkey -o search_results.txt -i search_script.sql
Wenn Sie auf Linux sind, dann ist das isql Tool namens isql-fb in einigen Distributionen (ich glaube, nach dem Firebird 1.5, nicht sicher darüber).
Ersetzen Sie mit Ihrem eigenen Datenbankname, Benutzername und Kennwort auf der Kommandozeile vor Lauf.
Nun wird die search_results.txt Datei wird für die gesamte Datenbank eine Liste aller passenden Datensätze haben.
Warnung vorsichtig sein ..., wenn Sie eine Datei mit dem Namen search_script.sql oder search_results.txt auf diesen Ordner haben ... die Dateinamen ändern, bevor die Befehle ausgeführt oder die Befehle anpassen andere verwenden Dateinamen.
-o Modifikator für isql Kommandozeilen-Tool überschreibt keine Datei, wodurch die Notwendigkeit, zuerst die Datei löscht, um ein neues Skript zu haben und einen neuen Bericht.
Das Skript gegen einen Firebird 2.1 Server in Windows getestet wurde, aber es wird für die meisten Firebird-Versionen und Plattformen arbeiten.
Genießen Sie!
Andere Tipps
würde ich die Daten in der Datenbank in einem Skript exportieren und verwenden, was Texteditor ich suchen möchte. sehen, wie man Metadaten exportieren