2012-10-29 44 views
1

有什麼方法可以將非空列更改爲可在Netezza中爲空? (或者我將不得不在表中創建一個新的可空列,傳輸數據並刪除舊列?)在Netezza中將NOT NULL約束更改爲NULL

對不起,如果答案顯示與谷歌搜索,我已經嘗試尋找和避風港'找不到東西。

回答

3

除了添加/刪除列本身,設置或清除默認值,更改varchar的長度以及重命名列之外,您可以在NZ 6.0中更改列。

您可能需要創建一個新列,移動數據,刪除舊列。 對於一張小桌子,這應該沒問題。

​​

但是,如果表很大:

由於Netezza公司是如何執行更新語句,它可能只是更好地創造一個全新的表,在移動數據。新西蘭需要原始表格的新郎才能刪除舊版本的更新記錄。

CREATE TABLE t_new (c bigint) DISTRIBUTE ON (c); 

INSERT INTO t_new SELECT c FROM t; 

ALTER TABLE t RENAME to t_old; 

ALTER TABLE t_new RENAME to t; 

DROP TABLE t_old; 
+0

感謝您的答覆:)(只是出於好奇,如何與那些行的Netezza公司創建一個新的錶快於更新行...這似乎有點不直觀) – iman453

+2

Netezza公司實際上並沒有更新的行到位。相反,只需在更新時插入新行作爲行的新「版本」,並隱藏舊行。在做整個表格時,你基本上正在做100%的新插入。但是,您仍然有那些必須使用GROOM TABLE命令刪除的「隱藏」行。當更新整個表格時,創建一個新表格更有意義,因爲您不必擔心修飾。 –

+0

啊,有道理。謝謝! – iman453