I did something like this a couple of years ago looking for specific 3 to 6 character strings in every table in a database (what fools we were to not use ISO currency codes from the beginning...), and excluded character based columns that were too short to hold the data as well as all non-character columns
select table_name, column_name from information_schema.columns
where data_type like '%char%'
and (CHARACTER_MAXIMUM_LENGTH > 2 or CHARACTER_MAXIMUM_LENGTH < 0)
I used that as the basis for the cursor, then created dynamic SQL that generated statements similar to
select table_name, column_name, count(*)
from table_name
where column_name like '%search text%'
group by table_name, column_name