Search every SQL table for a string

Here is some neat SQL to allow you to search every table and every field in the database for a string

CREATE TABLE myTable99 (TABLE_NAME sysname, COLUMN_NAME sysname, Occurs int)
GO
 
SET NOCOUNT ON
 
DECLARE @SQL varchar(8000), @TABLE_NAME sysname, @COLUMN_NAME sysname, @Sargable varchar(80), @Count int
 
SELECT @Sargable = 'There are too many subscription products resulting from the supplied request data'
 
DECLARE insaneCursor CURSOR FOR 
      SELECT c.TABLE_NAME, c.COLUMN_NAME 
        FROM INFORMATION_SCHEMA.Columns c INNER JOIN INFORMATION_SCHEMA.Tables t
          ON t.TABLE_SCHEMA = c.TABLE_SCHEMA AND t.TABLE_NAME = c.TABLE_NAME
      WHERE c.DATA_TYPE IN ('char','nchar','varchar','nvarchar','text','ntext')
         AND t.TABLE_TYPE = 'BASE TABLE'
 
OPEN insaneCursor
 
FETCH NEXT FROM insaneCursor INTO @TABLE_NAME, @COLUMN_NAME
 
WHILE @@FETCH_STATUS = 0
      BEGIN
            SELECT @SQL = 'INSERT INTO myTable99 (TABLE_NAME, COLUMN_NAME, Occurs) SELECT '
                        + '''' +  @TABLE_NAME + '''' + ','
                        + '''' + @COLUMN_NAME + '''' + ','
                        + 'COUNT(*) FROM [' + @TABLE_NAME  
                        + '] WHERE [' + @COLUMN_NAME + '] Like '
                        + ''''+ '%' + @Sargable + '%' + ''''
            --SELECT @SQL
            EXEC(@SQL)
            IF @@ERROR <> 0 
                  BEGIN 
                        SELECT @SQL
                        SELECT * FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = @TABLE_NAME
                        GOTO Error
                  END 
            FETCH NEXT FROM insaneCursor INTO @TABLE_NAME, @COLUMN_NAME
      END
 
SELECT * FROM myTable99 WHERE Occurs <> 0 
 
 
Error:
CLOSE insaneCursor
DEALLOCATE insaneCursor
 
GO
 
DROP TABLE myTable99
GO
 
SET NOCOUNT OFF