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 不支持堆表,所以表必须具有聚集索引。 如果创建一个表但未创建聚集约束,则必须首先创建一个聚集索引,然后才允许针对该表的插入操作。