2017-01-03 25 views
0

如何更新和列設置一定的值,如果它的值是null的所有行?設置價值的現有列有該列空值

例如: 我在表中具有Products 10行。我想設置的值'0'所有行一列名爲quantity如果該行對特定的列值null

我想:

ALTER TABLE Products ADD DEFAULT '0' FOR quantity 
WITH VALUES; 

...但它並沒有在該列中的值null更新到0

+2

對於現有行:'更新產品設定數量= 0,其中數量NULL' –

+0

您需要更新來更新現有行。 – jarlh

+0

@ahmedab​​delqader,謝謝。這工作。 –

回答

1

Alter Table是影響新行。

對於現有的行使用下面的代碼: -

Update Products set quantity = 0 where quantity IS NULL. 
0
update Products 
    set quantity=0 
    where quantity is null 
1

WITH VALUES條款適用於當您添加一列,而不是當你改變現有的。這解釋了爲什麼這些行在更改的列中仍然包含NULL。

而且由於列仍然可以爲空(您沒有添加NOT NULL約束),所以空值是完全有效的(並且DBMS沒有理由將這些NULLS更改爲默認值)。您當然可以顯式更新所有現有的NULL:

update products set quantity = 0 where quantity is null; 

但您可以稍後再次用NULL數量添加記錄。所以,你可能需要先更新記錄,然後改變列,以便在所有禁止空值:

alter table products alter column quantity integer not null; 
+0

這是一個很好的答案。我很早就想知道爲什麼我的默認值沒有出現在行中,但是這是因爲null是允許的。 –