2012-02-11 54 views
1

我想刪除表中的行(創建另一個作爲更新版本),如果其中任何具有空值刪除註冊表中如果有一列在SQL Server中的NULL值2008

例如

att1 att2 att3 
----------------- 
1.0 2.9 NULL 
23.6 7.9 8.9 
43.6 6.9 1.9 

,並得到

att1 att2 att3 
----------------- 
23.6 7.9 8.9 
43.6 6.9 1.9 

將如何做到這一點的最好辦法?

+0

你是什麼意思'創建另一個作爲更新的版本'? – 2012-02-11 21:42:15

回答

3

最簡單的方法

DELETE FROM T 
WHERE att1 IS NULL 
     OR att2 IS NULL 
     OR att3 IS NULL 

如果你在某些時候有柱的負荷,這可能變得更簡單。

DELETE FROM T 
WHERE EXISTS (SELECT * 
       FROM (VALUES(att1), 
          (att2), 
          (att3)) V(att) 
       WHERE att IS NULL) 

您也可以考慮像

DELETE FROM T 
WHERE att1 + att2 + att3 IS NULL 

,但可能會導致具有潛在的溢出錯誤不必要的問題。

+0

另一種可能性:'WHERE(att1 = att1 AND att2 = att2 AND att3 = att3)IS NULL' – 2012-02-11 23:04:20

2

假設所有列均爲數字...

DELETE FROM myTable WHERE att1+att2+att3 IS NULL 
+1

這將刪除** all **爲空的行。不**任何**爲空。 – 2012-02-11 22:07:05

+0

糟糕。你是對的馬丁。我更新了我的答案。謝謝。 – Diego 2012-02-11 22:36:40