2013-04-13 5 views
16

habe ich versucht, die folgenden, aber ich habe einen SyntaxfehlerWie fügen Sie und DROP Spalten in einer einzigen ALTER TABLE

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

Ist es möglich, ein DROP und ein ADD in der gleichen ALTER TABLE Anweisung auszuführen?

+3

Sie können mit einer alten Anweisung, trennen sie nicht fallen lassen und erstellen –

+1

Sie wechseln in PostgreSQL (Husten), die [mehr Änderungen] (http unterstützt: //www.postgresql. oder g/docs/currrent/static/sql-altertable.html) als Erweiterung der Standard-SQL-Syntax. (Aber obwohl ich oft PostgreSQL verwende, schreibe ich * normalerweise * SQL, das Erweiterungen vermeidet.) –

+0

Welche DBMS benutzen Sie? Orakel? DB2? –

Antwort

19

Wenn Sie den Blick auf ALTER TABLE SYTAX

Sie werden sehen, diese

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 ] 

Dies zu

reduziert werden kann

ALTER TABLE { ALTER COLUMN column_name | ADD | DROP }

Nach Transact-SQL Syntax Conventions (Transact-SQL) der | (vertikaler Balken)

Trennt Syntaxelemente, die in Klammern oder geschweiften Klammern eingeschlossen sind. Sie können nur eines der Elemente verwenden.

Sie können also nicht ändern, ablegen oder hinzufügen in einer einzigen Anweisung. Sie haben auch die Parens und das Komma, die nicht funktionieren. So werden Sie

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

benötigen Wenn Sie sie benötigen eine atomare Aktion sein müssen Sie nur in der Transaktion wickeln

+0

"_Wenn Sie sie als atomare Aktion benötigen, müssen Sie nur in transaction_ einbinden" - Führt Oracle DDL nicht zu impliziten Commits? – Sepster

+0

Oder wie in T-SQL: ALTER TABLE Noten DROP COLUMN Student_FamilyName, COLUMN Student_Name; –

1

Falls Ihre Datenbank Mysql ist, können Sie es auf diese Weise tun

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

Arbeiten in mySQL 5.5.5

Verwandte Themen