繁体   English   中英

如何在单个 ALTER TABLE 中添加和删除列

[英]How do you ADD and DROP columns in a single ALTER TABLE

我尝试了以下但出现语法错误

ALTER TABLE Grades ( 
DROP COLUMN (Student_FamilyName, Student_Name),
ADD Student_id INT );

是否可以在同一个ALTER TABLE语句中执行DROPADD

如果你看一下ALTER TABLE SYTAX

你会看到这个

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 ] [ SPARSE ]

    | {ADD | DROP } 
        { ROWGUIDCOL | PERSISTED | NOT FOR REPLICATION | SPARSE }
    } 
        | [ WITH { CHECK | NOCHECK } ]

    | ADD 
    { 
        <column_definition>
      | <computed_column_definition>
      | <table_constraint> 
      | <column_set_definition> 
    } [ ,...n ]

    | DROP 
     {
         [ CONSTRAINT ] 
         { 
              constraint_name 
              [ WITH 
               ( <drop_clustered_constraint_option> [ ,...n ] ) 
              ] 
          } [ ,...n ]
          | COLUMN 
          {
              column_name 
          } [ ,...n ]
     } [ ,...n ]

这可以减少到

ALTER TABLE { ALTER COLUMN column_name | ADD | DROP }

根据Transact-SQL 语法约定 (Transact-SQL) | (竖条)

分隔括在方括号或大括号中的语法项。 您只能使用其中一项。

因此,您不能在单个语句中更改、删除或添加。 您还有无法使用的括号和逗号。 所以你需要

ALTER TABLE Grades DROP COLUMN (Student_FamilyName, Student_Name);
ALTER TABLE Grades ADD  Student_id INT;

如果你需要它们是一个原子动作,你只需要包装在事务中

如果你的数据库是 MySQL,你可以这样做:

ALTER TABLE Grades
    DROP COLUMN Student_FamilyName, 
    DROP COLUMN Student_Name,
    ADD Student_id INT;

适用于MySQL 5.5.5

你可以使用这个:

ALTER TABLE Grades
  DROP Student_FamilyName, 
  DROP Student_Name,
  ADD Student_id INT;

你可以像这样使用之前/之后:

ALTER TABLE Grades
  DROP Student_FamilyName, 
  DROP Student_Name,
  ADD Student_id INT AFTER id;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM