web-dev-qa-db-fra.com

Comment ajouter et supprimer des colonnes dans une seule ALTER TABLE

J'ai essayé ce qui suit mais j'ai eu une erreur de syntaxe

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

Est-il possible d'effectuer un DROP et un ADD dans le même ALTER TABLE déclaration?

26
fatsokol

Si vous regardez le ALTER TABLE SYTAX

tu verras ça

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 ]

Cela peut être réduit à

ALTER TABLE { ALTER COLUMN column_name | ADD | DROP }

Selon Conventions de syntaxe Transact-SQL (Transact-SQL) the | (barre verticale)

Sépare les éléments de syntaxe entre crochets ou accolades. Vous ne pouvez utiliser qu'un seul des éléments.

Vous ne pouvez donc pas modifier, supprimer ou ajouter une seule instruction. Vous avez également les parens et les virgules qui ne fonctionneront pas. Vous aurez donc besoin

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

Si vous en avez besoin pour être une action atomique, il vous suffit de terminer la transaction

23
Conrad Frix

Dans le cas où votre base de données est Mysql, vous pouvez le faire de cette façon

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

Fonctionne dans mysql 5.5.5

4
Artur Klesun