小编典典

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

sql

假设我的表格中有100列。我不知道特定值可能存在于哪些列中。因此,我想检查所有列,如果它存在于100列中的任何一列中,我想选择它。

我搜索了一下,在大多数地方,解决方案似乎是以下内容

select * 
from tablename 
where col1='myval' 
   or col2='myval' 
   or col3='myval' 
   or .. or col100='myval'

我同意,我也读过一些论坛,据说这样做是对数据库设计不利的情况,但是我正在研究数据库中已经存在的表。

有没有更聪明的方式来做到这一点?


阅读 304

收藏
2021-03-23

共1个答案

小编典典

一种方法是通过反转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
2021-03-23