В дополнение к ответу Михаила я добавляю еще одно решение с MsSQL. Синтаксис может отличаться, но логика будет аналогичной:
create table test
(id int , name1 varchar(10), name2 varchar(10))
insert into test values (1,'yes','no')
insert into test values (2,'no','no')
insert into test values (3,'yes','yes')
declare @searchKey varchar(10) = 'yes'
declare @cols varchar(255) = (SELECT STUFF((
SELECT ', ' + c.name
FROM sys.columns c
JOIN sys.types AS t ON c.user_type_id=t.user_type_id
WHERE t.name != 'int' AND t.name != 'bit' AND t.name !='date' AND t.name !='datetime'
AND object_id =(SELECT object_id FROM sys.tables WHERE name='test')
FOR XML PATH('')),1,2,''))
declare @sql nvarchar(max) = 'SELECT * from test where '''+@searchKey+''' in ('+@cols+')'
exec sp_executesql @sql
Изменить: Обратите внимание, что это решение проверяет все столбцы таблицы, если конкретное значение включено в любой столбец. Предположим, ОП требует проверки 100 столбцов, до status100
, тогда я считаю, что такое динамическое решение было бы более удобным.