column_definition (Transact-SQL)

更新日期: 2005 年 12 月 5 日

指定使用 ALTER TABLE 添加到表的列的属性。

主题链接图标Transact-SQL 语法约定

语法

column_name [ type_schema_name. ] type_name
    [ 
                ( { precision [ , scale ] | max | 
            [ { CONTENT | DOCUMENT } ] xml_schema_collection } ) 
    ] 
    [ 
        [ CONSTRAINT constraint_name ] DEFAULT constant_expression 
             [ WITH VALUES ] 
        | IDENTITY [ (seed , increment ) ] [ NOT FOR REPLICATION ] 
    ] 
    [ ROWGUIDCOL ] 
    [ COLLATE < collation_name > ] 
    [ <column_constraint> [ ...n ] ] 

参数

  • column_name
    要更改、添加或删除的列的名称。column_name 可以包含 1 至 128 个字符。对于新列,如果创建列时使用的数据类型为 timestamp,则可以省略 column_name。如果没有为数据类型为 timestamp 的列指定 column_name,则该列将使用名称 timestamp
  • [ type_schema_name**.** ] type_name
    是添加的列的数据类型及其所属架构。

    type_name 可以是:

    • Microsoft SQL Server 系统数据类型。
    • 基于 SQL Server 系统数据类型的别名数据类型。别名数据类型必须先使用 CREATE TYPE 进行创建,然后才能在表定义中使用。
    • Microsoft .NET Framework 用户定义类型及其所属架构。.NET Framework 用户定义类型必须先使用 CREATE TYPE 进行创建,然后才能在表定义中使用。

    如果未指定 type_schema_name,则 Microsoft SQL Server 2005 数据库引擎将按以下顺序引用 type_name

    • SQL Server 系统数据类型。
    • 当前数据库中当前用户的默认架构。
    • 当前数据库中的 dbo 架构。
  • max
    只应用于 varcharnvarcharvarbinary 数据类型。它们用于存储 2^31 个字节的字符和二进制数据,以及 2^30 个字节的 Unicode 数据。
  • CONTENT
    指定 column_name 中每个数据类型为 xml 的实例都可以包含多个顶级元素。CONTENT 仅适用于 xml 数据类型,并且只有在同时指定了 xml_schema_collection 时才能指定 CONTENT。如果未指定,则默认行为是 CONTENT。
  • DOCUMENT
    指定 column_name 中每个数据类型为 xml 的实例都只能包含一个顶级元素。DOCUMENT 仅适用于 xml 数据类型,并且只有同时指定了 xml_schema_collection 时才能指定 DOCUMENT。
  • xml_schema_collection
    仅适用于 xml 数据类型,用于将 XML 架构集合与该类型相关联。在架构中键入 xml 列之前,必须先使用 CREATE XML SCHEMA COLLECTION 在数据库中创建该架构。
  • [ CONSTRAINT constraint_name ]
    指定 DEFAULT 定义的开头。若要保持与 SQL Server 早期版本的兼容性,该 DEFAULT 可以使用约束名称。constraint_name 必须遵循标识符规则,但名称不能以数字符号 (#) 开头这一点除外。如果未指定 constraint_name,则 DEFAULT 定义使用系统生成的名称。
  • DEFAULT
    指定列的默认值的关键字。DEFAULT 定义可用于为现有数据行中的新列提供值。DEFAULT 定义不能应用于 timestamp 列,也不能应用于具有 IDENTITY 属性的列。如果为用户定义类型列指定了默认值,则该类型应当支持从 constant_expression 到用户定义类型的隐式转换。
  • constant_expression
    用作默认列值的文字值、NULL 或者系统函数。如果与定义为 .NET Framework 用户定义类型的列结合使用,则该类型的实现必须支持从 constant_expression 到用户定义类型的隐式转换。
  • WITH VALUES
    指定 DEFAULT constant_expression 中给定的值将存储在添加到现有行的新列中。如果添加的列允许空值并指定了 WITH VALUES,则在添加到现有行的新列中存储默认值。如果没有为允许空值的列指定 WITH VALUES,则在现有行的新列中存储 NULL 值。如果新列不允许空值,则不论是否指定 WITH VALUES,都将在新行中存储默认值。
  • IDENTITY
    指定新列为标识列。SQL Server 数据库引擎为该列提供唯一的增量值。当您向现有表中添加标识符列时,还会将标识号添加到现有表行中,并按照最初添加这些行的顺序开始应用种子值和增量值。也会为添加的任何新行生成标识号。

    标识列通常与 PRIMARY KEY 约束一起用作表的唯一行标识符。tinyintsmallintintbigintdecimal(p,0)numeric(p,0) 列可以使用 IDENTITY 属性。每个表只能创建一个标识列。DEFAULT 关键字和绑定默认值不能用于标识列。要么同时指定种子和增量,要么都不指定。如果二者都未指定,则取默认值 (1,1)。不能修改现有的表列以添加 IDENTITY 属性。

    ms187742.note(zh-cn,SQL.90).gif注意:
    不支持向已发布的表添加标识列,因为将列复制到订阅服务器时,这会导致无法收敛。发布服务器上的标识列中的值取决于受影响表中行的物理存储顺序。行在订阅服务器中的存储顺序可能会有所不同;因此对于相同的行,标识列的值可能会不同。

    若要通过允许显式插入值来禁用某列的 IDENTITY 属性,请使用 SET IDENTITY_INSERT

  • seed
    用于表中所加载的第一行的值。
  • increment
    增加到上一个加载行的标识值的增量值。
  • ROWGUIDCOL
    指定该列是一个行全局唯一标识符列。ROWGUIDCOL 只能分配给 uniqueidentifier 列,并且每个表中只有一个 uniqueidentifier 列可以被指定为 ROWGUIDCOL 列。不能为用户定义数据类型分配 ROWGUIDCOL。

    ROWGUIDCOL 并不强制列中所存储值的唯一性。另外,该属性也不会为插入到表中的新行自动生成值。若要为每列生成唯一值,则可以在 INSERT 语句中使用 NEWID 函数,也可以将 NEWID 函数指定为列的默认值。有关详细信息,请参阅 NEWID (Transact-SQL)INSERT (Transact-SQL)

  • COLLATE < collation_name>
    指定列的排序规则。如果未指定,则为该列分配数据库的默认排序规则。排序规则名称既可以是 Windows 排序规则名称,也可以是 SQL 排序规则名称。有关列表及详细信息,请参阅 Windows 排序规则名称 (Transact-SQL)SQL 排序规则名称 (Transact-SQL)

    COLLATE 子句只能用于指定 charvarcharncharnvarchar 数据类型的列的排序规则。

    有关 COLLATE 子句的详细信息,请参阅 COLLATE (Transact-SQL)

备注

如果添加的列是 uniqueidentifier,则可以通过使用一个使用 NEWID() 函数的默认值对该列进行定义,以向表中的每个现有行的新列提供唯一标识符值。

数据库引擎不强制在列定义中指定 DEFAULT、IDENTITY、ROWGUIDCOL 或列约束的顺序。

示例

有关示例,请参阅 ALTER TABLE (Transact-SQL)

请参阅

参考

ALTER TABLE (Transact-SQL)

其他资源

使用 NOT FOR REPLICATION 来控制约束、标识和触发器

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2005 年 12 月 5 日

新增内容:
  • 阐明了 IDENTITY 子句用于添加新的标识符列时的行为。
  • 阐明了不能修改现有的表列以添加 IDENTITY 属性。