首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用IBexpert在整个SQL数据库中搜索指定的字符?

如何使用IBexpert在整个SQL数据库中搜索指定的字符?
EN

Stack Overflow用户
提问于 2010-11-11 18:20:46
回答 2查看 2K关注 0票数 0

如何使用IBexpert在整个数据库中搜索某些特定字符?

例如:

我在表的数据中有一些"'“('),这会让我稍后出错,我有很多表要手动搜索……我该怎么做呢?

Thx

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-12 03:50:42

我能想到的最好的方法是,你可以生成自己的脚本,然后在数据库上运行它。在这种情况下,isql (火鸟的命令文本行工具)比IBExpert更好地实现这一点。

因此,第一步是找到所有char或varchar列,并为每个表中的每个字段构造一个自定义查询。将此脚本另存为create_search_script.sql,保存在与数据库相同的目录中(如果连接到远程数据库,则保存在任何目录中)。

代码语言:javascript
复制
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)该文件夹并运行以下命令:

代码语言:javascript
复制
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的文件...在运行命令之前更改文件名,或调整命令以使用其他文件名。

isql命令行工具的-o修饰符不会覆盖文件,因此需要首先删除文件才能拥有新的脚本和报告。

该脚本在windows中的firebird 2.1服务器上进行了测试,但它可以在大多数firebird版本和平台上运行。

享受吧!

票数 2
EN

Stack Overflow用户

发布于 2011-07-11 16:15:06

我会将数据库数据导出到脚本中,然后使用我喜欢的任何文本编辑器进行搜索。See how to Export Metadata

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4153359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档