Pregunta

¿Cómo puedo buscar un poco de carácter particular, en toda la base de datos con IBExpert?

Por ejemplo:

Tengo un poco de "'" (') en alguna parte en los datos de las tablas y esto me está recibiendo un error más adelante, y tengo muchas tablas para buscar manualmente ... ¿Cómo puedo hacerlo?

Thx

¿Fue útil?

Solución

Lo mejor que se me ocurre es que puede generar su propio guión y ejecutarlo contra la base de datos. El Para este caso isql (herramienta de línea de comandos de texto para el pájaro de fuego) es mejor que IBExpert para lograr esto.

Por lo tanto, el primer paso es ir y encontrar todas las columnas CHAR o VARCHAR y construir una consulta personalizada para cada campo de cada tabla. Guardar este script como create_search_script.sql en el mismo directorio que la base de datos (o en cualquier directorio si se conecta a una base de datos remota).

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

Ahora, iniciar una nueva sesión de comandos, vaya (cd) a la carpeta y ejecutar estos comandos:

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 estás en Linux, la herramienta isql se llama isql-fb en algunas distribuciones (Creo que después de Firebird 1.5, no está seguro de ello).

Reemplazar con su propio nombre de la base de datos, nombre de usuario y contraseña en la línea de comandos antes de plazo.

Ahora, el archivo search_results.txt tendrá una lista de todos los registros coincidentes para toda la base de datos.

Advertencia tenga cuidado ... si usted tiene un archivo llamado search_script.sql o search_results.txt en esa carpeta ... cambiar los nombres de los archivos antes de ejecutar los comandos o adaptar los comandos de uso de otro los nombres de archivo.

-o modificador para la herramienta de línea de comandos isql no sobrescribe un archivo, por lo tanto la necesidad de primero elimine el archivo con el fin de tener un guión fresco y un nuevo informe.

El guión fue probado contra un servidor Firebird 2.1 en Windows, pero funciona para la mayoría de las versiones de Firebird y plataformas.

Disfrute!

Otros consejos

Me exportar los datos de bases de datos en una secuencia de comandos y utilizar cualquier editor de texto que desea buscar. Consulte Exportación de metadatos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top