CREATE TABLE (SQL Server Compact)

建立新的 Microsoft SQL Server Compact 資料表。

語法

CREATE TABLE table_name 
   ( { < column_definition > | < table_constraint > } [ ,...n ] 
   ) 
< column_definition > ::= 
   { column_name data_type } 
   [ { DEFAULT constant_expression 
      | [ IDENTITY [ ( seed , increment ) ]
      ]
    } ] 
   [ ROWGUIDCOL ] 
   [ < column_constraint > [ ...n ] ]
< column_constraint > ::= 
   [ CONSTRAINT constraint_name ] 
   { [ NULL | NOT NULL ] 
      | [ PRIMARY KEY | UNIQUE ] 
      | REFERENCES ref_table [ ( ref_column ) ] 
      [ ON DELETE { CASCADE | NO ACTION } ] 
      [ ON UPDATE { CASCADE | NO ACTION } ] 
    }
< 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 } ]
      [ ON UPDATE { CASCADE | NO ACTION } ] 
   }

引數

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

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

    注意

    在 SQL Server Compact 資料庫中的資料行名稱不得以 "__sys" 開頭。例如,__sysobjects 是受限制的資料行名稱。

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

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

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

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

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

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

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

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

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

  • NULL | NOT NULL
    指定資料行是否允許 Null 值的關鍵字。NULL 不完全是條件約束,而是可以利用 NOT NULL 的方式加以指定。

  • 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}
    當資料列有參考關係時建立的資料表時,如果從父資料表刪除受參考的資料列,這會指定資料表中的資料列採取何種動作。預設值為 NO ACTION。

    如果指定 CASCADE,在從父資料表刪除對應的受參考資料列時,就會從參考資料表刪除此資料列。如果指定 NO ACTION,SQL Server Compact 就會傳回錯誤,也會回復對於父資料表中受參考資料列的刪除動作。

  • ON UPDATE {CASCADE | NO ACTION}
    當資料列有參考關係時建立的資料表時,如果在父資料表中更新受參考的資料列,這會指定資料表中的資料列採取何種動作。預設值為 NO ACTION。

    如果指定 CASCADE,當在父資料表中更新對應的受參考資料列時,就會在參考資料表中更新此資料列。如果指定 NO ACTION,SQL Server Compact 就會傳回錯誤,也會回復對於父資料表中受參考資料列的更新動作。

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

備註

資料行定義

建立資料表時,您必須指定至少一個資料行定義。

條件約束

  • PRIMARY KEY 條件約束

    • 一個資料表只能含有一個 PRIMARY KEY 條件約束。

    • 各個 PRIMARY KEY 都會產生索引。

    • 在 PRIMARY KEY 條件約束內定義的所有資料行,都必須定義為 NOT NULL。如果未指定 Null 屬性,則參與 PRIMARY KEY 條件約束的所有資料行都必須將此屬性設定為 NOT NULL。

  • UNIQUE 條件約束

    • 各個 UNIQUE 條件約束都會產生索引。
  • FOREIGN KEY 條件約束

    • 將一個 NULL 之外的值輸入 FOREIGN KEY 條件約束的資料行時,此值必須存在於受參考資料行中,否則就會傳回外部索引鍵違規的錯誤訊息。

    • FOREIGN KEY 條件約束可以參考相同資料表中的其他資料行,稱為自我參考。然而,FOREIGN KEY 條件約束不能用來建立自我參考或循環 FOREIGN KEY 條件約束。

    • 資料行層級 FOREIGN KEY 條件約束的 REFERENCES 子句只能列出一個參考資料行。其資料類型必須與條件約束定義所在的資料行之資料類型相同。

    • 資料表層級 FOREIGN KEY 條件約束的 REFERENCES 子句的參考資料行數目,必須與條件約束資料行清單的資料行數目相同。各個參考資料行的資料類型,也必須與資料行清單中的對應資料行相同。

    • FOREIGN KEY 條件約束只能參考受參考資料表中 PRIMARY KEY 或 UNIQUE 條件約束的資料行。FOREIGN KEY 條件約束不能參考唯一索引。

  • 其他條件約束資訊

    • 為條件約束建立的索引不能以 DROP INDEX 陳述式卸除。此條件約束必須以 ALTER TABLE DROP CONSTRAINT 陳述式卸除。

    • 條件約束名稱必須符合識別碼的規則,但是名稱不能以數字符號 (#) 開頭。如果未提供 CONSTRAINT 關鍵字和 constraint_name,此條件約束就會指定系統產生的名稱。

    • 當 INSERT、UPDATE 或 DELETE 陳述式中違反條件約束時,此陳述式就會停止。

DEFAULT 定義

一個資料行只能有一個 DEFAULT 定義。這可以含有常數值或常數函數。

資料表定義中的 Null 屬性規則

資料行的 Null 屬性決定該資料行是否允許 NULL 值做為該資料行中的資料。NULL 不是零或空白。這表示沒有任何項目,或者已明確提供 NULL,而且這通常表示此值不明或不適用。

範例

以下範例說明如何:

  1. 建立含有兩個資料行的資料表,並且以識別欄位做為 PRIMARY KEY。

  2. 建立含有 PRIMARY KEY 條件約束的單一資料行資料表

  3. 建立含有一個資料行的資料表,其中的這個資料行參考其他資料表中的資料行

CREATE TABLE MyCustomers (CustID int IDENTITY (100,1) PRIMARY KEY, CompanyName nvarchar (50))

CREATE TABLE MyCustomers2 (CustID int CONSTRAINT pkCustId PRIMARY KEY)

CREATE TABLE MyOrders (OrderID int, CustID int REFERENCES MyCustomers(CustID))