2011-09-02 69 views
2

我有這樣一個表:如何在SQL Server中擺脫NULL值的2008臺

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呢?

+1

你的「修復」只是一個SELECT語句。爲什麼你會期望影響後續的查詢?你不應該*更新你的桌子嗎? –

+1

你想編輯表格內容嗎?或只是由此產生的查詢? – AJC

回答

7

如果你想改變你需要更新表的表中的值:

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

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

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

1

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

現在這樣說,你有三種選擇:

1)更新表不允許在這些列空,然後設置默認爲-1(或使用觸發器)注:這需要管理員特權,您可能沒有
2)總是用你的coalease或isnull()測試做一個選擇
3)你可以對同一個表進行視圖,然後在視圖中選擇做你的coalesce()或isnull()邏輯,然後你可以只需從視圖中選擇*,它會爲您提供相同的表格,但空值已更改。

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

+1

我喜歡每個其他評論與我爲#1給出的相同建議,但是你只評價我的......?當它是一個有效的(而不是正確的)選項時,爲什麼會降低利率。當然,他可能沒有DB管理員權限,但如果#1畢竟不是一個選項,我確實會說2或3。只是想明白... – ElementZero

+1

+1:同意。如果你打算投票,但不清楚爲什麼然後通過評論來澄清你的決定,所以我們都可以從中學習。答案在我看來實際上是非常好的(大多數情況下,需要修改權限才能更新,而不是管理員)。答案實際上也考慮了更廣泛的問題,總是一件好事。 –