CREATE TABLE(SQL 数据库)

在 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 中支持的参数和选项。

Azure SQL Database 支持由三部分组成的名称格式 database_name**.[schema_name].**object_name,其中 database_name 是当前数据库,database_name 是 tempdb,object_name 以 # 开头。

Azure SQL Database 不支持由四部分组成的名称。

尽管 Azure SQL Database 支持的所有客户端驱动程序都可以查询 SPARSE 列,但当前只有 SQL Server 2008 Native Client ODBC 驱动程序或更高版本才完全支持对结果集中的 Null 值进行压缩。

FEDERATED ON 子句将该表创建为现有联合中的一个联合表,并将联合的分发约束 (distribution_name) 应用于表 (column_name) 中的指定联合列。 联合表具有以下特征:

  • 联合表的联合列只能包含证实符合联合成员 range_low(含该值)和 range_high(不含该值)的数据。

  • 联合列的数据类型必须与联合定义中定义的数据类型完全匹配。

  • 联合表上的所有唯一索引或聚集索引都必须包含联合列。 联合列在索引中出现的顺序可能与联合中的键序号不同。

  • 联合列值无法更新为位于联合成员范围之外的值。

  • 联合列不能是持久或非持久的计算列。

  • 不能在联合表中创建索引视图。

  • 联合列不能可为 NULL。

  • 对于外键中位于同一个序号的引用方和引用表,联合表上的所有外键约束都需要包括联合列。 引用表不能与联合表具有外键关系。 联合表可以与引用表具有外键关系,无条件限制。

  • 您通常可以删除使用 FEDERATED ON 子句创建的表。 还可以使用 ALTER TABLE 更改联合表的所有属性,但联合特性(如联合键)除外。 若要将引用表更改为联合表,或将联合表更改为引用表,您必须使用所需的属性创建新表,并删除现有表。

  • 当表标记为 STATISTICS_NORECOMPUTE 时,联合操作(如 SPLIT)不会使统计信息失效或重新计算统计信息。 这可能导致在执行重新分区操作(如 SPLIT)之后出现执行计划问题。

  • 联合表支持标识属性

  • 联合表支持时间戳和行版本数据类型。

有关参数和 CREATE TABLE 语句的详细信息,请参阅 CREATE TABLE (SQL Server)

注释

因为 Azure SQL Database 不支持堆表,所以表必须具有聚集索引。 如果创建一个表但未创建聚集约束,则必须首先创建一个聚集索引,然后才允许针对该表的插入操作。