none
[Access]請問 ALTER COLUMN 移除 NOT NULL 的問題 RRS feed

  • 問題

  • 各位大大好,
    小弟有個 table1, 新增了一個 c1 欄位,

    ALTER TABLE table1 ADD COLUMN c1 TEXT(10) NOT NULL;

    現在想把  NOT NULL 移掉,
    ALTER TABLE table1 ALTER COLUMN c1 TEXT(10) NULL;

    結果可以順利執行這個 SQL 陳述式, 但還是一樣是 NOT NULL 的欄位,
    請問 SQL 陳述式該怎麼下? 謝謝.
    2009年11月11日 上午 10:11

解答

  • Hi,


    這種變更Tabe Schema的設定應該只會做一次? 因為對於資料表設計,應該是先規劃好,然後盡量去減少變更。
    所以這種單次的作法,時間花費上應該還好,不要常做就是,不然可能就要檢討當初資料表的設計問題了.




    微軟技術支援中心 (CSS)
    • 已標示為解答 LonghairPan 2009年11月13日 上午 07:00
    2009年11月13日 上午 06:05

所有回覆

  • Hi,

    您可以參考下列連結作法:
    http://office.microsoft.com/zh-tw/access/HP010322071028.aspx


    語法

    ALTER TABLE table {ADD {COLUMN field type [(size )] [NOT NULL] [CONSTRAINT index ] |
    ALTER COLUMN field type [(size )] |
    CONSTRAINT multifieldindex } |
    DROP {COLUMN field I CONSTRAINT indexname } }


    您可以使用 ALTER TABLE 陳述式,以多種方式變更現有的資料表:

    • 使用 ADD COLUMN 來新增新的欄位至資料表。請指定欄位名稱、資料類型以及 (適用於 Text 和 Binary 欄位) 選擇性大小。例如,下列陳述式新增名稱為 Notes 且具有 25 個字元的 Text 欄位至 Employees 資料表:

      ALTER TABLE Employees ADD COLUMN Notes TEXT(25)

      您也可以在該欄位定義索引。

      如果您指定某一欄位為 NOT NULL,則該欄位的新記錄必須要有有效資料。

    • 使用 ALTER COLUMN 來變更現有欄位的資料類型。請指定欄位名稱、新資料類型以及 Text 和 Binary 欄位的選擇性大小。例如,下列陳述式會將 Employees 資料表中名為 ZipCode (原定義為 Integer) 的欄位資料類型變更為 10 個字元的 Text 欄位:

      ALTER TABLE Employees ALTER COLUMN ZipCode TEXT(10)

    • 使用 ADD CONSTRAINT 來新增多欄位索引。
    • 使用 DROP COLUMN 來刪除欄位。請只指定欄位的名稱。
    • 使用 DROP CONSTRAINT 來刪除多欄位索引。請只指定 CONSTRAINT 保留字後的索引名稱。


    所以會執行成功,是執行到變更datatype & size, 但是設定null or not null那邊就不會處理到.
    因此,如果要調整,就要新增欄位來處理.

    微軟技術支援中心 (CSS)
    2009年11月12日 上午 03:35
  • 小弟目前是先 add 一個 temp column , 再用 update 把舊的 data 轉過去,
    然後 drop 舊 column , 再 add column , 再把 temp 的 update 回來, 再 drop temp,
    可是怕說大筆資料時會很花時間...
    2009年11月12日 下午 02:15
  • Hi,


    這種變更Tabe Schema的設定應該只會做一次? 因為對於資料表設計,應該是先規劃好,然後盡量去減少變更。
    所以這種單次的作法,時間花費上應該還好,不要常做就是,不然可能就要檢討當初資料表的設計問題了.




    微軟技術支援中心 (CSS)
    • 已標示為解答 LonghairPan 2009年11月13日 上午 07:00
    2009年11月13日 上午 06:05