如何使用IBexpert在整個數據庫中搜索某個特定字符?如何使用IBexpert在整個SQL數據庫中搜索指定的字符?
例如:
我有一些「'」(「)在表中的數據的一些部分,這讓我的錯誤以後,我有許多表手動搜索...我該怎麼做?
THX
如何使用IBexpert在整個數據庫中搜索某個特定字符?如何使用IBexpert在整個SQL數據庫中搜索指定的字符?
例如:
我有一些「'」(「)在表中的數據的一些部分,這讓我的錯誤以後,我有許多表手動搜索...我該怎麼做?
THX
我能想到的是,你可以生成自己的腳本並運行它針對數據庫的最好。在這種情況下,isql(火鳥命令文本行工具)比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命令行工具的修飾符不會覆蓋文件,因此需要先刪除該文件才能擁有新的腳本和新的報告。
這個腳本是在windows的firebird 2.1服務器上測試過的,但是它可以用於大多數firebird版本和平臺。
享受!
我會將數據庫數據導出到腳本中,並使用任何我喜歡搜索的文本編輯器。 See how to Export Metadata
沒有人=(((((((( – Shady 2010-11-11 13:15:54
是的,我......:D:D – jachguate 2010-11-15 22:33:31