如何更新和列設置一定的值,如果它的值是null
的所有行?設置價值的現有列有該列空值
例如: 我在表中具有Products
10行。我想設置的值'0'
所有行一列名爲quantity
如果該行對特定的列值null
。
我想:
ALTER TABLE Products ADD DEFAULT '0' FOR quantity
WITH VALUES;
...但它並沒有在該列中的值null
更新到0
。
如何更新和列設置一定的值,如果它的值是null
的所有行?設置價值的現有列有該列空值
例如: 我在表中具有Products
10行。我想設置的值'0'
所有行一列名爲quantity
如果該行對特定的列值null
。
我想:
ALTER TABLE Products ADD DEFAULT '0' FOR quantity
WITH VALUES;
...但它並沒有在該列中的值null
更新到0
。
的Alter Table
是影響新行。
對於現有的行使用下面的代碼: -
Update Products set quantity = 0 where quantity IS NULL.
update Products
set quantity=0
where quantity is null
的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;
這是一個很好的答案。我很早就想知道爲什麼我的默認值沒有出現在行中,但是這是因爲null是允許的。 –
對於現有行:'更新產品設定數量= 0,其中數量NULL' –
您需要更新來更新現有行。 – jarlh
@ahmedabdelqader,謝謝。這工作。 –