0

たとえば、データベースAがあり、それらのテーブルの1つに値CのフィールドBがあることはわかっていますが、そのフィールド名もテーブルもわかりません。

質問:その値Cは、どのテーブルとフィールドで(?)を検出するための最速の方法は何ですか?

4

1 に答える 1

1

このスクリプトはずっと前に書いたもので、リバースエンジニアリングに非常に役立ちました。

set nocount off

declare @searchvalue varchar(100)
set @searchvalue = 'text to find'


create table #tt (table_name varchar(64), column_name varchar(64), count int)
select * into #t from 
(
select 'select ''' + a.table_name + ''' ''table_name'',''' + a.column_name + ''' ''column_name'', count(*) count from [' + a.table_name +'] where [' +a.column_name+']='''+@searchvalue +'''' + ' group by ['+ a.column_name+']' sqlstring
from INFORMATION_SCHEMA.COLUMNS a
join 
INFORMATION_SCHEMA.TABLES b
on a.table_name = b.table_name
and b.table_type = 'base table'
 where data_type like '%char'
) a

--loop cursor
Declare @sqlstring as nvarchar(500)
Declare SqlCursor CURSOR FAST_FORWARD FOR
SELECT sqlstring FROM #t
OPEN SqlCursor
FETCH NEXT FROM SqlCursor
INTO @sqlstring
WHILE @@FETCH_STATUS = 0
BEGIN
      -- do row specific stuff here
insert #tt
exec(@sqlstring)
     FETCH NEXT FROM SqlCursor
     INTO @sqlstring
END
CLOSE SqlCursor
DEALLOCATE SqlCursor
select * from #tt
drop table #tt
drop table #t
于 2012-08-13T14:50:01.500 に答える