Как вы используете ADD и DROP столбцы в одном ALTER TABLE

Я попробовал следующее, но получил синтаксическую ошибку

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

Можно ли выполнить a DROP и ADD в том же самом выражении ALTER TABLE?

Ответы

Ответ 1

Если вы посмотрите 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;

Если вам нужно, чтобы это было атомное действие, вам просто нужно обернуть транзакцию

Ответ 2

Если ваша база данных Mysql, вы можете сделать это таким образом

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

Работает в mysql 5.5.5