Comment puis-je rechercher un caractère spécifié dans toute la base de données SQL avec IBExpert?

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

Question

Comment puis-je chercher un personnage particulier sur la base de données entière avec IBExpert?

Par exemple:

J'ai quelques « ' » (') dans une partie dans les données des tables et cela me devient une erreur plus tard, et j'ai beaucoup de tables pour rechercher manuellement ... Comment puis-je faire?

Thx

Était-ce utile?

La solution

Le mieux que je peux penser est que vous pouvez générer votre propre script et l'exécuter contre la base de données. Fro ce isql cas (commande outil de ligne de texte pour firebird) est meilleur que IBExpert pour y parvenir.

Alors, première étape consiste à aller chercher toutes les colonnes de char ou varchar et construire une requête personnalisée pour chaque champ dans chaque tableau. Enregistrer ce script comme create_search_script.sql dans le même répertoire que votre base de données (ou dans un répertoire si vous vous connectez à une base de données distante).

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'
              )
;

maintenant, commencer une nouvelle session de commande, allez (cd) dans ce dossier et exécuter ces commandes:

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

si vous êtes sous Linux, l'outil isql est nommé isql-fb dans certains distros (je pense après 1,5 firebird, pas sûr à ce sujet).

Remplacez-le par votre propre nom de base de données, nom d'utilisateur et mot de passe sur la ligne de commande avant l'exécution.

Maintenant, le fichier search_results.txt aura une liste de tous les enregistrements correspondants pour la base de données entière.

avertissement attention ... si vous avez un fichier nommé search_script.sql ou search_results.txt sur ce dossier ... changer les noms de fichiers avant d'exécuter les commandes ou d'adapter les commandes à utiliser d'autres les noms de fichiers.

modificateur -o pour l'outil de ligne de commande isql ne remplace pas un fichier, donc la nécessité d'abord supprimer le fichier afin d'avoir un script frais et un nouveau rapport.

Le script a été testé sur un serveur 2.1 firebird dans les fenêtres, mais cela fonctionnera pour la plupart des versions et plates-formes firebird.

Amusez-vous!

Autres conseils

J'exporter les données de base de données dans un script et à utiliser quel que soit l'éditeur de texte j'aime la recherche. Voir comment exporter des métadonnées

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top