干草堆中的TSQL搜索针

干草堆中的TSQL搜索针,sql,tsql,Sql,Tsql,例如,我有一个数据库A,我知道其中一个表中的某个地方是值为C的字段B,但我不知道该字段名或表 问:检测(?)哪个表和字段中的值是C的最快方法是什么?我很久以前写过这个脚本,它对逆向工程非常有用 set nocount off declare @searchvalue varchar(100) set @searchvalue = 'text to find' create table #tt (table_name varchar(64), column_name varchar(64),

例如,我有一个数据库A,我知道其中一个表中的某个地方是值为C的字段B,但我不知道该字段名或表


问:检测(?)哪个表和字段中的值是C的最快方法是什么?

我很久以前写过这个脚本,它对逆向工程非常有用

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

这可能有用-。随意返工。SSMS tools pack具有此功能。谢谢Martin!我想这是一个很好的选择,但是SSMS工具有什么许可证呢?(GPL?)one@undefined很高兴听到你喜欢我的剧本