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

War es hilfreich?

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

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