2016-06-30 77 views

回答

0

使用case表達爲每列。

select case when column1 = 'X' then 'Column1' else <whatever> end as column1, 
     case when column2 = 'X' then 'Column2' else <whatever> end as column2, 
... 
     case when column1340 = 'X' then 'Column1340' else <whatever> end as column1340 
from tablename 

如果你只是想要NULL而不是其他任何東西,你可以跳過else <whatever>部分。

+0

我有一大組列不會將他們每個人都輸入到sql請求中,也不會很自適應。 – shrimpdrake

+0

1340列你遇到了麻煩......要麼使用動態sql,要麼重新設計數據庫。 – jarlh

0

對於1300列,我會去動態SQL

Declare @SQL varchar(max) = '' 
Select @SQL = @SQL+coalesce(';Update ['+Table_Name+'] Set ['+Column_Name+']='''+Column_Name+''' where ['+Column_Name+']=''X''' ,'') 
    From (Select Table_Name,Column_Name From INFORMATION_SCHEMA.COLUMNS where Table_Name='SomeTable') A 
Print @SQL 
--Exec(@SQL) 

返回

;更新[SomeTable]中的[列1] = '列1',其中[列1] = 'X';更新[SomeTable ] Set [column2] ='column2'where [column2] ='X';更新[SomeTable] Set [column3] ='column3'其中[column3] ='X'

+0

這聽起來不錯,但我很遺憾不得不在Access中這樣做,所以我不知道動態SQL是否可行。 – shrimpdrake

+0

對不起,我是SQL Server中心。當我看到我剛剛設想的標記SQL時。 –

相關問題