CREATE TABLE (Azure SQL Database)

在 Azure SQL Database 中建立新的資料表。

重要事項重要事項

目前的同盟實作將會隨著 Web 和 Business 的服務層停用。請考慮部署自訂分區解決方案,讓延展性、彈性和效能最大化。如需有關自訂分區的詳細資訊,請參閱<向外擴充 Azure SQL Database>。

適用於:Azure SQL Database. 如需 SQL Server語法,請參閱<CREATE TABLE (SQL Server)>。

語法

CREATE TABLE 
    [ database_name . [ schema_name ] . | schema_name . ] table_name 
    ( { <column_definition> | <computed_column_definition> 
        | <column_set_definition> } 
        [ <table_constraint> ] [ ,...n ] ) 
FEDERATED ON ( distribution_name = column_name)
[ ; ]

<column_definition> ::= 
column_name <data_type>
    [ COLLATE collation_name ] 

    [ NULL | NOT NULL ]
    [ 
        [ CONSTRAINT constraint_name ] DEFAULT constant_expression ] 
      | [ IDENTITY [ ( seed ,increment ) ] 
    ]
  [ <column_constraint> [ ...n ] ]

  [ SPARSE ]
  
<data type> ::= 
[ type_schema_name . ] type_name 
    [ ( precision [ , scale ] | max 
] 

<column_constraint> ::= 
[ CONSTRAINT constraint_name ] 
{     { PRIMARY KEY | UNIQUE } 
        [ CLUSTERED | NONCLUSTERED ] 
        [ 
          WITH ( < index_option > [ , ...n ] ) 
        ] 
| [ FOREIGN KEY ] 
        REFERENCES [ schema_name . ] referenced_ table_name [ ( ref_column ) ] 
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
  | CHECK  ( logical_expression ) 
} 

<computed_column_definition> ::= 
column_name AS computed_column_expression 
[ PERSISTED [ NOT NULL ] ]
[ 
    [ CONSTRAINT constraint_name ]
    { PRIMARY KEY | UNIQUE }
        [ CLUSTERED | NONCLUSTERED ]
        [ 
          WITH ( <index_option> [ , ...n ] )
        ]
    | [ FOREIGN KEY ] 
        REFERENCES referenced_table_name [ ( ref_column ) ] 
        [ ON DELETE { NO ACTION | CASCADE } ] 
        [ ON UPDATE { NO ACTION } ] 
   [ NOT FOR REPLICATION ] 
    | CHECK ( logical_expression ) 
] 

<column_set_definition> ::= 
column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS

< table_constraint > ::=
[ CONSTRAINT constraint_name ] 
{ 
    { PRIMARY KEY | UNIQUE } 
        [ CLUSTERED | NONCLUSTERED ] 
        (column [ ASC | DESC ] [ ,...n ] ) 
        [ 
           WITH ( <index_option> [ , ...n ] ) 
        ]
  
    | FOREIGN KEY 
        ( column [ ,...n ] ) 
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ] 
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 

    | CHECK ( logical_expression ) 
} 

<index_option> ::=
{ 
  IGNORE_DUP_KEY = { ON | OFF } 
  | STATISTICS_NORECOMPUTE = { ON | OFF } 
}

引數

注意

這個語法圖顯示出 Azure SQL Database 中支援的引數和選項。

當 database_name 為目前的資料庫或者 database_name 為 tempdb 而且 object_name 以 # 開頭時,Azure SQL Database 支援三部分名稱格式 database_name**.[schema_name].**object_name。

Azure SQL Database 不支援四部分名稱。

雖然 SPARSE 資料行可以透過 Azure SQL Database 所支援的所有用戶端驅動程式來查詢,但目前只有 SQL Server 2008 Native Client ODBC 驅動程式或更高版本可對結果集中的 Null 值壓縮提供完整的支援。

FEDERATED ON 子句會將資料表建立為現有同盟內的同盟資料表,並將同盟的散發條件約束 (distribution_name) 套用至資料表 (column_name) 內指定的同盟資料行。 同盟資料表具有以下特性:

  • 同盟資料表的同盟資料行只能包含符合同盟成員 range_low 包含和 range_high 排除的資料。

  • 同盟資料行的資料類型必須完全符合同盟定義中所定義的資料類型。

  • 同盟資料表上的所有唯一索引和叢集索引都必須包含同盟資料行。 同盟資料行出現在索引中的順序可以和同盟中的索引鍵序數不同。

  • 同盟資料行值無法更新為同盟成員範圍以外的值。

  • 同盟資料行不可以是保存的或非保存的計算資料行。

  • 同盟資料表上無法建立索引檢視表。

  • 同盟資料行不能是可為 Null。

  • 同盟資料表上的所有外部索引鍵條件約束都必須在外部索引鍵中同時包含查閱者資料表和所參考資料表上相同序數的同盟資料行。 參考資料表不可以有同盟資料表的外部索引鍵關聯性。 同盟資料表可以有參考資料表的外部索引鍵關聯性,而沒有任何限制。

  • 您可以正常卸除使用 FEDERATED ON 子句建立的資料表。 除了像同盟索引鍵這樣的同盟屬性 (Attribute) 外,您也可以使用 ALTER TABLE 來變更同盟資料表的所有屬性 (Property)。 若要將參考資料表變更為同盟資料表,或將同盟資料表變更為參考資料表,您必須使用所需的屬性建立新的資料表,並卸除現有的資料表。

  • 當資料表標示了 STATISTICS_NORECOMPUTE 時,同盟作業 (例如 SPLIT) 就不會重新計算統計資料或讓資料無效。 這可能會在像 SPLIT 這樣的重新分割作業之後造成執行計畫問題。

  • 同盟資料表不支援識別屬性。

  • 同盟資料表不支援時間戳記 (timestamp) 和資料列版本 (rowversion) 資料類型。

如需有關引數和 CREATE TABLE 陳述式的詳細資訊,請參閱CREATE TABLE (SQL Server)

備註

因為 Azure SQL Database 不支援堆積資料表,所以資料表必須有叢集索引。 如果建立資料表時不含叢集條件約束,則必須先建立叢集索引,然後才允許在資料表上進行插入作業。