Как я могу найти указанный символ во всей базе данных SQL с ibexpert?

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

Вопрос

Как я могу найти определенный персонаж на всей базе данных с ibexpert?

Например:

У меня есть несколько «» (') в некоторой части данных в данных таблиц, и это получает мне ошибку позже, и у меня есть много таблиц для поиска вручную ... Как я могу это сделать?

Спасибо

Это было полезно?

Решение

Лучше всего я могу думать, что вы можете создать свой собственный сценарий и запустить его против базы данных. FRO Этот случай ISQL (инструмент Text Text Line для 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.

Наслаждаться!

Другие советы

Я бы экспортировал данные базы данных в сценарии и использую любой текстовый редактор, который я люблю искать.Посмотрите, как экспортировать метаданные

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top