Search a SQL database for tables and fields that contain a string

Overview:

Trying to research how a SQL Server database stores data? This SQL may help. If you execute this SQL in SQL Server Management Studio, this SQL will return every table and field in a database that contains the search term you specify on line 9 of this code (see the line that says Set @search_str = 'jones').

To use:

Just edit line 9 to put in your search term (replace the "jones") and then execute it.

SQL CODE:

DECLARE

@VAR1 SYSNAME,

@VAR2 SYSNAME,

@VAR3 NVARCHAR(4000),

@search_str NVARCHAR(1000),

@counter INT,

@dbname SYSNAME

-- SET SEARCH CONDITION HERE--

SET @search_str='jones'

IF EXISTS (SELECT 1 FROM TEMPDB..SYSOBJECTS WHERE NAME LIKE '#FTS_TABLE%')

DROP TABLE #FTS_TABLE

CREATE TABLE #FTS_TABLE (TABLE_NAME VARCHAR(150), CONTENT VARCHAR(1000),

CONTAIN VARCHAR(15), SEARCH_STRING VARCHAR(1000))

SET @counter=0

SELECT @dbname= db_name()

DECLARE CUR CURSOR FOR

SELECT SYSOBJECTS.NAME , SYSCOLUMNS.NAME FROM SYSOBJECTS

INNER JOIN SYSCOLUMNS ON SYSOBJECTS.ID = SYSCOLUMNS.ID

INNER JOIN SYSTYPES ON SYSCOLUMNS.XTYPE = SYSTYPES.XTYPE WHERE

SYSOBJECTS.TYPE ='U' AND

OBJECTPROPERTY(OBJECT_ID(SYSOBJECTS.NAME), N'ISMSSHIPPED') = 0 AND

SYSTYPES.NAME IN('CHAR', 'VARCHAR','TEXT','nvarchar','uniqueidentifier')--AND

--SYSOBJECTS.NAME LIKE '%MAM_%'

ORDER BY SYSOBJECTS.NAME, SYSCOLUMNS.COLID

OPEN CUR

FETCH NEXT FROM CUR INTO @VAR1, @VAR2

WHILE @@FETCH_STATUS = 0

BEGIN

SET @VAR3=N'IF EXISTS( SELECT 1 FROM '+@VAR1+' WHERE '+@VAR2+' LIKE '''+

'%'+@search_str+'%'+''' )INSERT INTO #FTS_TABLE SELECT '

+''''+UPPER(@VAR1+'('+''+@VAR2)+')'+' HAS STRING '''+' ,'+

@VAR2+','+'''CONTAINING '''+','''+UPPER(@search_str)+''' FROM '+@VAR1+

' WHERE '+@VAR2+' LIKE '+''''+'%'+@search_str+'%'+''''

EXEC SP_EXECUTESQL @VAR3

IF @@ROWCOUNT>0

set @counter=@counter+1

FETCH NEXT FROM CUR INTO @VAR1, @VAR2

END

CLOSE CUR

DEALLOCATE CUR

IF @counter=0

BEGIN

IF CHARINDEX('-',HOST_NAME())<>0

PRINT 'Sorry '+REPLACE(HOST_NAME(),SUBSTRING(HOST_NAME(), CHARINDEX('-',HOST_NAME()), 12),'')+

', no records matching your search string '''+upper(@search_str)+''''+CHAR(13)+'found in database '+

@dbname+CHAR(13)+'Please try again with other strings.'

ELSE

PRINT 'Sorry '+HOST_NAME()+

', no records matching your search string '''+UPPER(@search_str)+''''+CHAR(13)+'found in database '+

@dbname+CHAR(13)+'Please try again with other strings.'

END

ELSE

SELECT distinct TABLE_NAME 'TABLE(COLUMN)', CONTENT 'VALUE'

FROM #FTS_TABLE WHERE TABLE_NAME NOT LIKE '%#FTS_TABLE%'