假设我的表格中有100列。我不知道特定值可能存在于哪些列中。因此,我想检查所有列,如果它存在于100列中的任何一列中,我想选择它。
我搜索了一下,在大多数地方,解决方案似乎是以下内容
select * from tablename where col1='myval' or col2='myval' or col3='myval' or .. or col100='myval'
我同意,我也读过一些论坛,据说这样做是对数据库设计不利的情况,但是我正在研究数据库中已经存在的表。
有没有更聪明的方式来做到这一点?
一种方法是通过反转In操作员
In
select * from yourtable where 'Myval' in (col1,col2,col3,...)
如果您不想手动输入列,则使用该列dynamic sql来生成查询
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