如何检查sql表中任何列中是否存在值

IAM*_*bby 2 sql

说,我在表中有100列.我不知道特定值可能存在于哪些列中.所以,我想检查所有列,如果它存在于任何100列中,我想选择它.

我搜索了一下,在大多数地方,解决方案似乎如下所示

select * 
from tablename 
where col1='myval' 
   or col2='myval' 
   or col3='myval' 
   or .. or col100='myval'
Run Code Online (Sandbox Code Playgroud)

我也读了一些论坛,据说这是一个不好的数据库设计案例,我同意,但我正在研究数据库中已有的表.

有更聪明的方法吗?

Pரத*_*ீப் 12

一种方法是扭转In操作员

select * 
from yourtable 
where 'Myval' in (col1,col2,col3,...)
Run Code Online (Sandbox Code Playgroud)

如果您不想手动键入列用于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
Run Code Online (Sandbox Code Playgroud)

  • 从来不知道你可以在'IN'中使用列 (2认同)