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