2010-11-22 228 views
4

如何在SQL表中將所有0值設置爲NULL?將所有0值設置爲NULL

在此先感謝。

+3

那麼這是哪一個呢?將NULL值設置爲0,或將0值設置爲NULL? – 2010-11-22 13:00:12

+3

標題和身體是相反的問題。 – Jamie 2014-02-26 18:41:57

回答

13
update table set col = null where col = 0 
+0

這是不可用的,因爲如果我有比例如30列更多,我可以做什麼?我寫了所有的列名稱。 – Nuisance 2016-11-17 12:36:11

+1

@Nuisance如果你需要將30列更新爲null,當它們爲零時,你將不得不編寫如上所示的代碼。爲什麼不可用? – NimChimpsky 2016-11-17 23:15:34

3
UPDATE MYTABLE SET MYCOLUMN = NULL WHERE MYCOLUMN = 0 

但你在所有列是什麼意思?這將是更多的工作,最好你只是爲每列創建單獨的語句。也可以讀取架構並在存儲過程和EXEC中生成SQL,但我不建議這樣做,因爲我認爲這是一次性工作,如果您經常這樣做,那麼設計中的某些內容是錯誤的。

+0

是的,我的意思是所有的列..! – Marshal 2010-11-22 12:49:01

2
UPDATE MyTable 
SET Col1 = NULLIF(Col1, 0), 
    Col2 = NULLIF(Col2, 0), 
    Col3 = NULLIF(Col3, 0) 
WHERE (Col1 = 0 
    OR Col2 = 0 
    OR Col3 = 0) 
1

如果是一次性工作,您總是可以從下面的語句中獲取輸出並執行它。

SELECT 'UPDATE ' 
     + OBJECT_NAME(OBJECT_ID) 
     + ' SET ' 
     + sc.name 
     + ' = NULL WHERE ' 
     + sc.name 
     + ' = 0'   
FROM sys.columns sc 
     INNER JOIN sys.types st ON st.system_type_id = sc.system_type_id 
WHERE st.name IN ('bigint', 'int', 'smallint')   
     AND OBJECT_NAME(OBJECT_ID) = 'YourTable' 
相關問題