Here is a script to identify a value in your database. The script will identify the presence of the search value from all tables and generate select queries from the respective tables which you can execute and confirm.
DECLARE @STRINGTOLOOKFOR VARCHAR(500)
,@TABLENAME SYSNAME
,@FULLTABLENAME SYSNAME
--<-- Give the value to search------->
SELECT @STRINGTOLOOKFOR = '7F0B0DD5-22BC-421B-9416-3A7C24146A98'
--<-- Give the value to search------->
DECLARE @COLUMNNAME NVARCHAR(128),
@DATETYPE NVARCHAR(128),
@ROW SMALLINT,
@ROWCOUNT INT,
@SQL NVARCHAR(1000)
DECLARE STRING_FIND_CURSOR CURSOR FAST_FORWARD FOR
SELECT TABLE_NAME, TABLE_SCHEMA+'.'+TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE ='BASE TABLE'
OPEN STRING_FIND_CURSOR
FETCH NEXT FROM STRING_FIND_CURSOR
INTO @TABLENAME, @FULLTABLENAME
SET @STRINGTOLOOKFOR = @STRINGTOLOOKFOR
WHILE @@FETCH_STATUS = 0
BEGIN
SET @ROW = 1
SELECT @ROWCOUNT = MAX([ORDINAL_POSITION])
FROM [INFORMATION_SCHEMA].[COLUMNS]
WHERE [TABLE_NAME] = @TABLENAME
GROUP BY [ORDINAL_POSITION]
WHILE @ROW <= @ROWCOUNT
BEGIN
SELECT @COLUMNNAME = QUOTENAME(COLUMN_NAME) ,
@DATETYPE = [DATA_TYPE]
FROM [INFORMATION_SCHEMA].[COLUMNS]
WHERE [TABLE_NAME] = @TABLENAME
AND [ORDINAL_POSITION] = @ROW
ORDER BY [ORDINAL_POSITION]
SET @ROW = @ROW + 1
SET @SQL = NULL
IF @DATETYPE IN ( N'CHAR', N'VARCHAR', N'TEXT')
SET @SQL = 'SELECT * FROM ' + @FULLTABLENAME + ' WHERE PATINDEX(''%' + @STRINGTOLOOKFOR + '%'', ' + @COLUMNNAME + ') > 0'
IF @DATETYPE IN (N'UNIQUEIDENTIFIER') AND @STRINGTOLOOKFOR LIKE '[A-F,0-9][A-F,0-9][A-F,0-9][A-F,0-9][A-F,0-9][A-F,0-9][A-F,0-9][A-F,0-9][-][A-F,0-9][A-F,0-9][A-F,0-9][A-F,0-9][-][A-F,0-9][A-F,0-9][A-F,0-9][A-F,0-9][-][A-F,0-9][A-F,0-9][A-F,0-9][A-F,0-9][-][A-F,0-9][A-F,0-9][A-F,0-9][A-F,0-9][A-F,0-9][A-F,0-9][A-F,0-9][A-F,0-9][A-F,0-9][A-F,0-9][A-F,0-9][A-F,0-9]'
SET @SQL = 'SELECT * FROM ' + @FULLTABLENAME + ' WHERE' + @COLUMNNAME + ' = ''' + @STRINGTOLOOKFOR + ''''
IF @DATETYPE IN (N'NCHAR', N'NVARCHAR', N'NTEXT')
SET @SQL = 'SELECT * FROM ' + @FULLTABLENAME + ' WHERE PATINDEX(''%' + @STRINGTOLOOKFOR + '%'', CAST(' + @COLUMNNAME + ' AS TEXT)) > 0'
IF @DATETYPE IN (N'SQL_VARIANT',N'SMALLINT',N'INT',N'BIGINT',N'TINYINT')
SET @SQL = 'SELECT * FROM ' + @FULLTABLENAME + ' WHERE CONVERT(VARCHAR(8000),' + @COLUMNNAME + ') LIKE ''%'+ @STRINGTOLOOKFOR + '%'''
IF @SQL IS NOT NULL
BEGIN
SET @SQL = 'IF EXISTS(' + @SQL + ') PRINT ''SELECT '+@COLUMNNAME+' FROM ' + @FULLTABLENAME + ' WHERE ' + @COLUMNNAME + ' LIKE ''''%'+@STRINGTOLOOKFOR+'%'''''''
EXEC (@SQL)
END
END
FETCH NEXT FROM STRING_FIND_CURSOR
INTO @TABLENAME, @FULLTABLENAME
END
CLOSE STRING_FIND_CURSOR
DEALLOCATE STRING_FIND_CURSOR
Very nice method Latheesh
LikeLike
Thanks a lot Madhi.
LikeLike