通过更改、添加或删除列和约束,重新分配分区,或者启用或禁用约束和触发器,从而修改表的定义。
ALTER TABLE [ database_name . [ schema_name ] . | schema_name . ] table_name
{
ALTER COLUMN column_name
{
[ type_schema_name. ] type_name [ ( { precision [ , scale ]
| max | xml_schema_collection } ) ]
[ COLLATE collation_name ]
[ NULL | NOT NULL ]
| {ADD | DROP } { ROWGUIDCOL | PERSISTED | NOT FOR REPLICATION}
}
| [ WITH { CHECK | NOCHECK } ] ADD
{
<column_definition>
| <computed_column_definition>
| <table_constraint>
} [ ,...n ]
| DROP
{
[ CONSTRAINT ] constraint_name
[ WITH ( <drop_clustered_constraint_option> [ ,...n ] ) ]
| COLUMN column_name
} [ ,...n ]
| [ WITH { CHECK | NOCHECK } ] { CHECK | NOCHECK } CONSTRAINT
{ ALL | constraint_name [ ,...n ] }
| { ENABLE | DISABLE } TRIGGER
{ ALL | trigger_name [ ,...n ] }
| SWITCH [ PARTITION source_partition_number_expression ]
TO target_table
[ PARTITION target_partition_number_expression ]
}
[ ; ]
<drop_clustered_constraint_option> ::=
{
MAXDOP = max_degree_of_parallelism
| ONLINE = {ON | OFF }
| MOVE TO { partition_scheme_name ( column_name ) | filegroup
| "default"}
}
-
database_name
-
要在其中创建表的数据库的名称。
-
schema_name
-
表所属架构的名称。
-
table_name
-
要更改的表的名称。如果表不在当前数据库中,或者不包含在当前用户所拥有的架构中,则必须显式指定数据库和架构。
-
ALTER COLUMN
-
指定要更改命名列。如果兼容级别等于或低于 65,则不允许使用 ALTER COLUMN。有关详细信息,请参阅 sp_dbcmptlevel (Transact-SQL)。
修改后的列不能为下列任何一种列:
- 数据类型为 timestamp 的列。
- 表的 ROWGUIDCOL 列。
- 计算列或用于计算列的列。
- 用在索引中的列,除非该列数据类型为 varchar、nvarchar 或 varbinary,数据类型没有更改,而且新列大小等于或者大于旧列大小。
- 用于由 CREATE STATISTICS 语句生成的统计信息中的列。首先,用 DROP STATISTICS 语句删除统计信息。由查询优化器自动生成的统计信息将被 ALTER COLUMN 自动删除。
- 用于 PRIMARY KEY 或 [FOREIGN KEY] REFERENCES 约束中的列。
- 用于 CHECK 或 UNIQUE 约束中的列。但是,允许更改用于 CHECK 或 UNIQUE 约束中的长度可变的列的长度。
- 与默认定义关联的列。但是,如果不更改数据类型,则可以更改列的长度、精度或小数位数。
仅能通过下列方式更改 text、ntext 和 image 列的数据类型:
- text 改为 varchar(max)、nvarchar(max) 或 xml
- ntext 改为 varchar(max)、nvarchar(max) 或 xml
- image 改为 varbinary(max)
无法更改已分区表的列的数据类型。 - text 改为 varchar(max)、nvarchar(max) 或 xml
- 数据类型为 timestamp 的列。
-
column_name
-
要更改、添加或删除的列的名称。column_name 最多可以包含 128 个字符。对于新列,如果创建列时使用的数据类型为 timestamp,则可以省略 column_name。对于数据类型为 timestamp 的列,如果未指定 column_name,则使用名称 timestamp。
-
[
type_schema_name
. ]
type_name
-
更改后的列的新数据类型或添加的列的数据类型。不能为已分区表的现有列指定 type_name。type_name 可以为下列任意一种类型:
- SQL Server 2005 系统数据类型。
- 基于 SQL Server 系统数据类型的别名数据类型。必须先用 CREATE TYPE 语句创建别名数据类型,然后才能将其用于表定义中。
- .NET Framework 用户定义类型及其所属的架构。只有在使用 CREATE TYPE 语句创建了 .NET Framework 用户定义类型后,才能将其用于表定义。
更改后的列的 type_name 应符合下列条件:
- 以前的数据类型必须可以隐式转换为新数据类型。
- type_name 不能为 timestamp。
- 对于 ALTER COLUMN,ANSI_NULL 默认值始终为 ON;如果没有指定,列可为空。
- 对于 ALTER COLUMN,ANSI_PADDING 填充始终为 ON。
- 如果修改后的列是标识列,则 new_data_type 必须是支持标识属性的数据类型。
- 当前的 SET ARITHABORT 设置将被忽略。ALTER TABLE 的操作方式与 ARITHABORT 设置为 ON 时相同。
注意: 如果未指定 COLLATE 子句,则更改列的数据类型将导致更改数据库的默认排序规则。 - SQL Server 2005 系统数据类型。
-
precision
-
指定的数据类型的精度。有关有效精度值的详细信息,请参阅精度、小数位数和长度 (Transact-SQL)。
-
scale
-
是指定数据类型的小数位数。有关有效小数位数值的详细信息,请参阅精度、小数位数和长度 (Transact-SQL)。
-
max
-
仅应用于 varchar、nvarchar 和 varbinary 数据类型,以便存储 2^31-1 个字节的字符、二进制数据以及 Unicode 数据。
-
xml_schema_collection
-
仅应用于 xml 数据类型,以便将 XML 架构与类型相关联。在架构集合中键入 xml 列之前,必须首先使用 CREATE XML SCHEMA COLLECTION 在数据库中创建架构集合。
-
COLLATE <
collation_name >
-
指定更改后的列的新排序规则。如果未指定,则为该列分配数据库的默认排序规则。排序规则名称既可以是 Windows 排序规则名称,也可以是 SQL 排序规则名称。有关列表及详细信息,请参阅 Windows 排序规则名称 (Transact-SQL)和