sql - Search all tables in all databases on server for a string -


edit: question flagged duplicate, not. other answers on show how search tables in single database, need search tables in every database on given server.

i need search tables databases on server search string. i've got email address littered throughout tables going have change of domain , need prepare report shows these email addresses located. not going able add stored procedure databases need query that's doesn't involve exec-ing sp repeatedly. pulled code off the net , using search tables haven't been able figure out how run on databases.

drop table #results create table #results (columnname nvarchar(370), columnvalue nvarchar(3630))  set nocount on  declare @searchstr nvarchar(100), @tablename nvarchar(256), @columnname nvarchar(128), @searchstr2 nvarchar(110) set @searchstr = '@domaintobereplaced.com' set  @tablename = '' set @searchstr2 = quotename('%' + @searchstr + '%','''')  while @tablename not null begin     set @columnname = ''     set @tablename =      (         select min(quotename(table_schema) + '.' + quotename(table_name))            information_schema.tables               table_type = 'base table'             , quotename(table_schema) + '.' + quotename(table_name) > @tablename             , objectproperty(                     object_id(                         quotename(table_schema) + '.' + quotename(table_name)                          ), 'ismsshipped'                            ) = 0     )      while (@tablename not null) , (@columnname not null)     begin         set @columnname =         (             select min(quotename(column_name))                information_schema.columns                   table_schema    = parsename(@tablename, 2)                 , table_name  = parsename(@tablename, 1)                 , data_type in ('char', 'varchar', 'nchar', 'nvarchar')                 , quotename(column_name) > @columnname         )          if @columnname not null         begin             insert #results             exec             (                 'select top 10 ''' + @tablename + '.' + @columnname + ''', left(' + @columnname + ', 3630)                  ' + @tablename + ' (nolock) ' +                 ' ' + @columnname + ' ' + @searchstr2             )         end     end  end  select columnname, columnvalue #results 

first, have collect list of databases' names sys.databases.
have create dynamic sql extract names of tables in databases in format [database].[schema].[table name]'. can linking following tables:[database].sys.schemas' & [database].sys.tables'<br/> list of text columns linking found tables to[database].sys.columns'
when of that, can create dynamic queries tables , text columns.

btw if hide data inside of text column have include in search , conversion.


Comments