我需要遍历每个数据库表和每一列以查看它是否包含电话号码。任何以文本 + 或 00 或 0 开头的内容。
我找到了循环遍历列名的代码/游标,但它们不搜索实际数据。任何想法我怎么能做到这一点?
我需要遍历每个数据库表和每一列以查看它是否包含电话号码。任何以文本 + 或 00 或 0 开头的内容。
我找到了循环遍历列名的代码/游标,但它们不搜索实际数据。任何想法我怎么能做到这一点?
您需要将这些游标与查询结合使用以查找所需内容。
这是一个搜索所有表的所有列的脚本。我将留给您在搜索中添加所有数据库
(这是假设您使用的是 SQL Server 2005 或更高版本。它可能适用于其他系统,但未经测试。
--fields types to search within
declare table_field_cursor cursor local fast_forward for select sys.tables.name, sys.columns.name from sys.columns inner join sys.tables on (sys.columns.object_id = sys.tables.object_id)inner join sys.types on (sys.columns.system_type_id = sys.types.system_type_id)
where sys.tables.type = 'U' and sys.types.name in ('varchar', 'nvarchar', 'char', 'nchar', 'text')
--Stop printing the Rows affected message.
set NOCOUNT ON
--loop through all tables & fields seaching for your string
open table_field_cursor
declare @table_name sysname
declare @field_name sysname
fetch next from table_field_cursor into @table_name, @field_name
while @@fetch_status <> -1
begin
if @@FETCH_STATUS <> -2
execute ('
if EXISTS(select [' + @field_name + '] from [' + @table_name + '] with (nolock) where cast([' + @field_name + '] as nvarchar(3)) like ''+%'' or cast([' + @field_name + '] as nvarchar(3)) like ''0%'')
begin
print ''Found in table ' + @table_name + '.' + @field_name + '!''
select * from [' + @table_name + '] with (nolock) where cast([' + @field_name + '] as nvarchar(3)) like ''+%'' or cast([' + @field_name + '] as nvarchar(3)) like ''0%''
end
')
fetch next from table_field_cursor into @table_name, @field_name
end
close table_field_cursor
deallocate table_field_cursor
这将搜索所有具有varchar
, nvarchar
, char
, nchar
,text
列的表,并查看它是否以0
or开头+
(我们不需要检查,00
因为它包含在0
检查中)。如果您能够摆脱检查text
列的要求,您可以删除nvarchar(3)
铸件并可能加快速度,因为text
不支持like
查询,所以铸件已完成。
要搜索多个数据库,请查看sp_MSForeachdb
如果您使用的是 Oracle 数据库,请在循环中使用 EXECUTE IMMEDIATE 创建一个 sql 语句,网络上有很多资源,其中之一是http://www.dba-oracle.com/t_oracle_execute_immediate.htm)。使用 EXECUTE IMMEDIATE 您可以构建 sql 语句。希望能帮助到你。(抱歉,我刚刚看到您使用的是 sql server,但也有类似的东西:http ://social.msdn.microsoft.com/Forums/en/transactsql/thread/4572e8eb-265c-4e6d-b501-22eef2111caf )