ALTER TABLE (SQL Server Compact)

通过修改、添加或删除列和约束来修改表定义。

语法

ALTER TABLE table_name
    ALTER COLUMN column_name 
   {
    type_name[({precision[.scale]})][NULL|NOT NULL]
   {DROP DEFAULT 
   | SET DEFAULT constant_expression 
   | IDENTITY [ ( seed , increment ) ]
   } 
| ADD 
   { < column_definition > | < table_constraint > } [ ,...n ] 
| DROP 
   { [ CONSTRAINT ] constraint_name 
   | COLUMN column }
] }
< column_definition > ::= 
   { column_name data_type } 
   [ [ DEFAULT constant_expression ] 
      | IDENTITY [ ( seed , increment ) ] 
   ] 
   [ROWGUIDCOL]
   [ < column_constraint > ] [ ...n ] ]
< column_constraint > ::= 
   [ NULL | NOT NULL ] 
   [ CONSTRAINT constraint_name ] 
   { 
      | { PRIMARY KEY | UNIQUE } 
      | REFERENCES ref_table [ (ref_column) ] 
      [ ON DELETE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] 
      [ ON UPDATE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ]
   }
< table_constraint > ::= 
   [ CONSTRAINT constraint_name ] 
   { [ { PRIMARY KEY | UNIQUE } 
      { ( column [ ,...n ] ) } 
      | FOREIGN KEY 
        ( column [ ,...n ] )
        REFERENCES ref_table [ (ref_column [ ,...n ] ) ] 
      [ ON DELETE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] 
      [ ON UPDATE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] 
   }

参数

  • table_name
    要修改的表的名称。

    备注

    表名称必须符合标识符规则。table_name 在数据库中必须是唯一的。table_name 最多可包含 128 个字符。

  • ALTER COLUMN
    指定要进行更改或修改的特定列。

  • column_name
    表中列的名称。列名称必须符合标识符规则,并且在表中必须是唯一的。

  • data_type
    指定列的数据类型。有关数据类型的详细信息,请参阅数据类型

  • DEFAULT
    指定在插入操作中没有显式提供值时为该列提供的值。除了 IDENTITY 属性定义的列之外,DEFAULT 定义可应用于任何列。删除表时将删除 DEFAULT 定义。只有常量值(例如字符串或日期函数)才可以作为默认值。

  • IDENTITY
    指示新列是标识列。在为表添加新行时,Microsoft SQL Server Compact 将为列提供增量值。标识列通常与 PRIMARY KEY 约束结合使用以作为表的唯一行标识符。IDENTITY 属性只能分配给 int 列。每个表只能创建一个标识列。标识列无法使用绑定默认值和 DEFAULT 约束。必须同时指定 seed 和 increment,或者不指定任何值。如果不指定任何值,则默认为 (1,1)。

  • seed
    向表中加载第一行时所使用的值。

  • increment
    加到所加载的上一行的标识值上的增量值。

  • ADD
    指定添加一个或多个列定义或表约束。

  • DROP { [CONSTRAINT] constraint_name| COLUMN column}
    指定要从表中删除 constraint_name 或 column_name。

  • ROWGUIDCOL
    指示新列是行全局唯一标识符列。每个表只有一个 uniqueidentifier 列可以指派为 ROWGUIDCOL 列。ROWGUIDCOL 属性只能分配给 uniqueidentifier 列。

    ROWGUIDCOL 自动为插入到表中的新行生成值。

  • NULL | NOT NULL
    指定列中是否允许空值的关键字。严格意义上来说,NULL 并不是约束,但可以使用与指定 NOT NULL 同样的方式指定。

  • CONSTRAINT
    指示 PRIMARY KEY、UNIQUE 或 FOREIGN KEY 约束定义开始的可选关键字。约束是强制执行数据完整性并创建表及其列的特殊类型索引的特殊属性。

  • constraint_name
    约束的名称。constraint_name 为可选参数,在数据库中必须是唯一的。如果没有指定 constraint_name,则 SQL Server Compact 会生成约束名。

  • PRIMARY KEY
    通过使用唯一的索引强制执行特定列的实体完整性的约束。每个表只能创建一个 PRIMARY KEY 约束。

  • UNIQUE
    通过使用唯一的索引提供特定列的实体完整性的约束。UNIQUE 约束中的列可以为 NULL,但每一列只允许一个 NULL 值。一个表可以包含多个 UNIQUE 约束。

    备注

    SQL Server Compact 可以使用索引强制执行 PRIMARY KEY 和 UNIQUE 约束。我们建议您不要依赖于这种行为,也不要尝试修改由约束创建的任何索引。

  • FOREIGN KEY...REFERENCES
    为列中的数据提供引用完整性的约束。FOREIGN KEY 约束要求列中的每个值都存在于所引用表的指定的列中。

  • ref_table
    FOREIGN KEY 约束所引用的表的名称。

  • ( ref_column [ ,... n] )
    FOREIGN KEY 约束所引用的表中的一列或多列。

  • ON DELETE {CASCADE | NO ACTION |SET DEFAULT | SET NULL}
    指定当创建的表中的行具有引用关系并且从父表中删除该行所引用的行时,要对该行采取的操作。默认设置为 NO ACTION。有关详细信息,请参阅本主题后面的“备注”部分。

  • ON UPDATE {CASCADE | NO ACTION | SET DEFAULT | SET NULL}
    指定当创建的表中的行具有引用关系并且在父表中更新该行所引用的行时,要对该行采取的操作。默认设置为 NO ACTION。有关详细信息,请参阅本主题后面的“备注”部分。

  • column
    用括号括起来的一列或多列,在表约束中指示这些列用在约束定义中。

  • n
    占位符,指示前面的项可以重复 n 次。

注释

对于 ON DELETE 或 ON UPDATE,如果指定 CASCADE 选项,并且相应的引用行在父表中进行了更新,该行也会在引用表中更新。如果指定了 NO ACTION,则 SQL Server Compact 将返回错误,并且回滚父表中所引用行上的更新操作。

例如,数据库中可能包含两个表:A 和 B。表 A 和表 B 具有引用关系:A.ItemID 外键引用 B.ItemID 主键。

如果在表 B 的某行上执行 UPDATE 语句,并且为 A.ItemID 指定 ON UPDATE CASCADE 操作,则 SQL Server Compact 将检查表 A 中的一个或多个相关的行。如果存在相关的行,则将更新表 A 中相关的行,因为该行是表 B 中引用的行。

另外,如果指定了 NO ACTION,则 SQL Server Compact 将返回错误,并且回滚表 B 中所引用行上的更新操作(如果在引用它的表 A 中至少有一行)。

代码示例

A. 更改标识列上的种子和增量值

下面的示例将更改标识列上的种子和增量值:

CREATE TABLE MyCustomers (CustID INTEGER IDENTITY (100,1) PRIMARY KEY, CompanyName NvarChar (50));

INSERT INTO MyCustomers (CompanyName) VALUES ('A. Datum Corporation');

ALTER TABLE MyCustomers ALTER COLUMN CustId IDENTITY (200, 2);

B. 为列添加默认值

下面的示例将修改 CompanyName 列,使其具有默认值:

ALTER TABLE MyCustomers ALTER COLUMN CompanyName SET DEFAULT 'A. Datum Corporation'

C. 从列中删除默认值

下面的示例将修改 CompanyName 列,使其不具有默认值:

ALTER TABLE MyCustomers ALTER COLUMN CompanyName DROP DEFAULT