RealWorldDevelopers
9/19/2016 - 11:21 PM

Search All Cloumns in All Tables for a Value SQL

Search All Cloumns in All Tables for a Value SQL

--initialize transaction  
 SET    TRANSACTION    ISOLATION    LEVEL    READ    UNCOMMITTED  
 SET   nocount   ON  

 --initial declarations  
 DECLARE   @rowID   INT   , @maxRowID   INT  
 DECLARE   @   SQL   nvarchar(4000)  
 DECLARE   @searchValue varchar(100)  
 DECLARE   @statements   TABLE   (rowID   INT   ,   SQL   varchar(8000))  
 CREATE    TABLE    #   results (tableName varchar(250), tableSchema varchar(250), columnName varchar(250))  

 SET   @rowID   =   1  
 SET   @searchValue   =    'test'  

 --create CTE table holding metadata  
 ;   WITH   MyInfo (tableName, tableSchema, columnName)   AS   (  
 SELECT   TABLE_NAME   , table_schema,   COLUMN_NAME   FROM information_schema.columns WHERE data_type   NOT    IN   (   'image'   ,   'text'   ,   'timestamp'   ,   'binary'   )  
 )  

 --create search strings  


 INSERT INTO   @statements  
 SELECT   row_number() over (order by tableName, columnName)   AS   rowID,   'insert into #results select distinct '''   +   tableName   +   ''', '''   +   tableSchema   +   ''', '''   +   columnName   +   ''' from ['   +   tableSchema   +   '].['   +   tableName   +   '] where convert(varchar,['   +   columnName   +   ']) like ''%'   +   @searchValue   +   '%'''    FROM   myInfo  

 --initialize while components and process search strings  
 SELECT   @maxRowID   =    MAX   (rowID)   FROM   @statements  
 WHILE @rowID   <=   @maxRowID  
  BEGIN  
  SELECT   @   SQL    =    SQL    FROM   @statements   WHERE   rowID   =   @rowID  
  EXEC   sp_executeSQL @   SQL  
  SET   @rowID   =   @rowID   +   1  
 end  

 --view results and cleanup  
 SELECT    *    FROM    #   results  
 DROP    TABLE    #   results