Лучшее, что я могу думать, это то, что вы можете создать свой собственный скрипт и запустить его в базе данных. В этом случае isql (инструмент командной строки для firebird) лучше, чем IBExpert для выполнения этой задачи.
Итак, первый шаг — найти все столбцы char или varchar и создать собственный запрос для каждого поля в каждой таблице. Сохраните этот скрипт как create_search_script.sql в том же каталоге, что и ваша база данных (или в любом каталоге, если вы подключаетесь к удаленной базе данных).
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'
)
;
теперь запустите новый командный сеанс, перейдите (cd) в эту папку и выполните следующие команды:
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
если вы используете Linux, инструмент isql в некоторых дистрибутивах называется isql-fb (думаю, после Firebird 1.5, не уверен в этом).
Замените собственным именем базы данных, именем пользователя и паролем в командной строке перед запуском.
Теперь файл search_results.txt будет содержать список всех совпадающих записей для всей базы данных.
предупреждение будьте осторожны... если у вас есть файл с именем search_script.sql или search_results.txt в этой папке... измените имена файлов перед запуском команд или адаптируйте команды для использования других имен файлов.
Модификатор -o для инструмента командной строки isql не перезаписывает файл, поэтому необходимо сначала удалить файл, чтобы получить новый сценарий и новый отчет.
Сценарий был протестирован на сервере firebird 2.1 в Windows, но он будет работать для большинства версий и платформ Firebird.
Наслаждаться!
person
jachguate
schedule
11.11.2010