2015-01-17 86 views
1

說,我在表中有100列。我不知道特定值可能存在於哪些列中。所以,我想檢查所有列,如果它存在於任何100列中,我想選擇它。如何檢查表中的任何一列中是否存在一個值sql

我四處搜尋了一下,在大多數地方的解決方案似乎是類似下面的

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

我也看過,其中有做這幾個論壇,據說是數據庫不好的情況下設計,我同意,但我正在處理數據庫中已有的表。

有沒有更聰明的方法來做到這一點?

回答

10

一種方式是通過逆轉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 
+2

從來不知道,你可以在使用列'IN' – terary

+0

@terary - 是的,你可以:) –

相關問題