ALTER TABLE (SQL Server Compact)

透過修改、新增或卸除資料行與條件約束來修改資料表定義。

語法

ALTER TABLE table_name
    ALTER COLUMN column_name 
   {
    type_name[({precision[.scale]})][NULL|NOT NULL]
   {DROP DEFAULT 
   | SET DEFAULT constant_expression 
   | IDENTITY [ ( seed , increment ) ]
   } 
| ADD 
   { < column_definition > | < table_constraint > } [ ,...n ] 
| DROP 
   { [ CONSTRAINT ] constraint_name 
   | COLUMN column }
] }
< column_definition > ::= 
   { column_name data_type } 
   [ [ DEFAULT constant_expression ] 
      | IDENTITY [ ( seed , increment ) ] 
   ] 
   [ROWGUIDCOL]
   [ < column_constraint > ] [ ...n ] ]
< column_constraint > ::= 
   [ NULL | NOT NULL ] 
   [ CONSTRAINT constraint_name ] 
   { 
      | { PRIMARY KEY | UNIQUE } 
      | REFERENCES ref_table [ (ref_column) ] 
      [ ON DELETE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] 
      [ ON UPDATE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ]
   }
< table_constraint > ::= 
   [ CONSTRAINT constraint_name ] 
   { [ { PRIMARY KEY | UNIQUE } 
      { ( column [ ,...n ] ) } 
      | FOREIGN KEY 
        ( column [ ,...n ] )
        REFERENCES ref_table [ (ref_column [ ,...n ] ) ] 
      [ ON DELETE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] 
      [ ON UPDATE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] 
   }

引數

  • table_name
    要修改的資料表名稱。

    注意

    資料表名稱必須符合識別碼的規則。此 table_name 在資料庫中必須是唯一的。table_name 最多可以含有 128 個字元。

  • ALTER COLUMN
    指示將變更或修改特定資料行。

  • column_name
    資料表中資料行的名稱。資料行名稱必須符合識別碼的規則,並且在資料表中必須是唯一的。

  • data_type
    指定資料行的資料類型。如需資料類型的資訊,請參閱<資料類型>。

  • DEFAULT
    如果在插入動作期間未明確提供資料行的值,則指定提供給資料行的值。DEFAULT 定義可以套用到任何資料行,但是以 IDENTITY 屬性定義的資料行除外。卸除資料表時,也會移除 DEFAULT 定義。只有字元字串或日期函數之類的常數值才可以做為預設值。

  • IDENTITY
    表示新的資料行是識別欄位。將新的資料列加入至資料表時,Microsoft SQL Server Compact 會為資料行提供累加值。識別欄位通常會搭配 PRIMARY KEY 條件約束使用,做為資料表的唯一資料列識別碼。IDENTITY 屬性只能指派給 int 資料行。每個資料表只能建立一個識別欄位。繫結預設值與 DEFAULT 條件約束無法搭配識別欄位使用。您必須同時指定種子與遞增值,或兩者都不指定。如果兩者都不指定,則預設值為 (1,1)。

  • 種子
    此值用於載入到資料表的第一個資料列。

  • 遞增值
    加入到先前載入資料列之識別值的遞增值。

  • ADD
    指示要加入一個或多個資料行定義或資料表條件約束。

  • DROP { [CONSTRAINT] constraint_name| COLUMN column}
    指示將從資料表移除 constraint_name 或 column_name。

  • ROWGUIDCOL
    指出新的資料行是資料列全域唯一識別碼資料行。每個資料表只能有一個 uniqueidentifier 資料行是設計為 ROWGUIDCOL 資料行。此 ROWGUIDCOL 屬性只能被指派給一個 uniqueidentifier 資料行。

    ROWGUIDCOL 會自動為插入資料表的新資料列產生數值。

  • NULL | NOT NULL
    指示資料行中是否允許 Null 值的關鍵字。NULL 不是真正的條件約束,但是可以使用與 NOT NULL 相同的方式指定。

  • CONSTRAINT
    選擇性使用的關鍵字,指示 PRIMARY KEY、UNIQUE 或 FOREIGN KEY 條件約束的定義開頭。條件約束是特殊屬性,會強制執行資料完整性,並且為資料表及其資料行建立特殊型別的索引。

  • constraint_name
    條件約束的名稱。此 constraint_name 可以選擇性使用,而且在資料庫中必須是唯一的。如果未指定 constraint_name,SQL Server Compact 會產生條件約束名稱。

  • PRIMARY KEY
    一種條件約束,使用唯一索引為一個或多個特定資料行強制執行實體完整性。每個資料表只能建立一個 PRIMARY KEY 條件約束。

  • UNIQUE
    一種條件約束,使用唯一索引為一個或多個特定資料行提供實體完整性。UNIQUE 條件約束中的資料行可以是 NULL,不過每個資料行只允許一個 NULL 值。資料表可以有多個 UNIQUE 條件約束。

    注意

    SQL Server Compact 可以使用索引來強制執行 PRIMARY KEY 與 UNIQUE 條件約束。我們建議您不要依賴此行為,也不要試圖修改任何屬於某個條件約束而建立的索引。

  • FOREIGN KEY...REFERENCES
    針對資料行中的資料提供參考完整性的條件約束。FOREIGN KEY 條件約束要求資料行中的每個值出現在所參考資料表中的指定資料行。

  • ref_table
    FOREIGN KEY 條件約束所參考的資料表名稱。

  • ( ref_column [ ,... n] )
    來自 FOREIGN KEY 條件約束所參考之資料表中的一個資料行或資料行清單。

  • ON DELETE {CASCADE | NO ACTION |SET DEFAULT | SET NULL}
    當資料列有參考關係時建立的資料表時,如果從父資料表刪除受參考的資料列,這會指定資料表中的資料列採取何種動作。預設值為 NO ACTION。如需詳細資訊,請參閱此主題稍後的「備註」一節。

  • ON UPDATE {CASCADE | NO ACTION | SET DEFAULT | SET NULL}
    當資料列有參考關係時建立的資料表時,如果在父資料表中更新受參考的資料列,這會指定資料表中的資料列採取何種動作。預設值為 NO ACTION。如需詳細資訊,請參閱此主題稍後的「備註」一節。

  • 資料行
    置於括號之內的一個資料行或資料行清單用於資料表條件約束,以指定條件約束定義中使用的資料行。

  • n
    表示前一項目可以重複 n 次的預留位置。

備註

對於 ON DELETE 或 ON UPDATE,若指定 CASCADE 選項,則在父資料表中更新對應的所參考資料列時,參考的資料列也會更新。如果指定 NO ACTION,SQL Server Compact 就會傳回錯誤,也會回復對於父資料表中受參考資料列的更新動作。

例如,資料庫中可能有 A 和 B 兩個資料表。資料表 A 具有資料表 B 的參考關聯性:A.ItemID 外部索引鍵會參考 B.ItemID 主索引鍵。

如果在資料表 B 中的資料列執行 UPDATE 陳述式,並且針對 A.ItemID 指定 ON UPDATE CASCADE 動作,SQL Server Compact 會檢查資料表 A 中是否有一個或多個相依資料列。如果有,則資料表 A 中的相依資料列會更新,所參考的資料表 B 資料列也會更新。

或者,如果指定 NO ACTION,在資料表 A 中至少有一個資料列參考資料表 B 中更新的資料列,SQL Server Compact 便會傳回錯誤,並且回復資料表 B 中的更新動作。

程式碼範例

A. 變更識別欄位的種子與遞增值

以下範例會變更識別欄位的種子與遞增值。

CREATE TABLE MyCustomers (CustID INTEGER IDENTITY (100,1) PRIMARY KEY, CompanyName NvarChar (50));

INSERT INTO MyCustomers (CompanyName) VALUES ('A. Datum Corporation');

ALTER TABLE MyCustomers ALTER COLUMN CustId IDENTITY (200, 2);

B. 將預設值新增至資料行

以下範例會修改 CompanyName 資料行,以便具有預設值。

ALTER TABLE MyCustomers ALTER COLUMN CompanyName SET DEFAULT 'A. Datum Corporation'

C. 卸除資料行中的預設值

以下範例會修改 CompanyName 資料行,以便不具有預設值。

ALTER TABLE MyCustomers ALTER COLUMN CompanyName DROP DEFAULT