簡體   English   中英

如何擺脫SQL Server 2008表中的NULL值

[英]How to get rid of NULL values in SQL Server 2008 table

我有一張桌子:

1   0.22    0.14    0.05
23  11      0.32    0.16
4   NULL    1       0.39
NULL NULL   .8      1
NULL .5     .7      NULL 

我想修改表成為

1   0.22  0.14  0.05
23   1    0.32  0.16
4   -1      1   0.39
-1  -1     .8     1
-1  .5     .7    -1

如果你看我把NULL改為-1

我在努力:

SELECT
  coalesce([a1], -1), coalesce([a2], -1),coalesce([a3], -1), coalesce([a4], -1)
FROM tableee;

哪個是正確的,但是當我做一個SELECT *我得到了具有null值的表...

我如何修改表,所以當我執行SELECT *我不會得到NULL而是-1而不是?

如果要更改表中的值,則需要更新表:

UPDATE Tableeee t
SET t.a1 = COALESCE(t.a1,-1),
    t.a2 = COALESCE(t.a2,-1),
    t.a3 = COALESCE(t.a3,-1)
    t.a4 = COALESCE(t.a4,-1)

或者,您可以將列更改為不可為空,並提供默認值-1。 如果您有這個要求,您可能希望這樣做。 更新數據只是一個綳帶,您需要在數據庫中強制執行此要求。

您可以更改表模式,以使列不可為空,並且默認值為-1。 這應該改變數據,以便所有NULL值變為-1。

如果您不想實際更改數據而只想更改查詢返回的數據集,請考慮根據COALESCE()查詢創建視圖。 然后,只要您想要看到-1代替NULL,就可以使用該視圖。

沒有辦法實際修改表,因此使用select *得到-1而不是null。 您允許這些列使用空值,因此隱藏空值不是理想的邏輯。

現在說,你有三個選擇:

1)更新表以不允許這些列中的空值,然后將默認值設置為-1(或使用觸發器) 注意:這需要管理員權限,您可能沒有
2)始終使用coalease或isnull()測試進行選擇
3)你可以查看同一個表,然后在視圖中選擇你的coalesce()或isnull()邏輯,然后你可以從視圖中選擇*,它會給你相同的表,但是null改變了。

僅供參考,選項2或3有開銷,所以只有在#1不是選項時才這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM