Comment puis-je rechercher un caractère spécifié dans toute la base de données SQL avec IBExpert?
-
08-10-2019 - |
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
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