说,我在表格中有100列。我不知道特定值可能存在于哪些列中。所以,我想检查所有列,如果它存在于任何100列中,我想选择它。
我搜索了一下,在大多数地方,解决方案似乎类似于以下
select *
from tablename
where col1='myval'
or col2='myval'
or col3='myval'
or .. or col100='myval'
我还阅读了几个论坛,据说这是一个不好的数据库设计案例,我同意,但我正在处理数据库中已有的表。
有更聪明的方法吗?
答案 0 :(得分:12)
一种方法是撤消In
运算符
select *
from yourtable
where 'Myval' in (col1,col2,col3,...)
如果您不想手动输入列,请使用dynamic sql
生成查询
declare @sql varchar(max)='select *
from yourtable
where ''Myval'' in ('
select @sql+=quotename(column_name)+',' from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='yourtable'
select @sql =left(@sql,len(@sql)-1)+')'
--print @sql
exec sp_executesql @sql