2013-04-13 8 views
16

Ho provato quanto segue ma ho avuto un errore di sintassiCome si fa ad aggiungere e colonne Drop in un unico ALTER TABLE

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

E 'possibile effettuare una DROP ed un ADD nella stessa ALTER TABLE dichiarazione?

+3

non si può fare goccia e creare con una sola istruzione ALTER, separarlo –

+1

si passa a PostgreSQL (tosse), che supporta [più modifiche] (http: //www.postgresql. o g/docs/currrent/static/sql-altertable.html) come estensione della sintassi SQL standard. (Ma anche se uso PostgreSQL molto, io * di solito * scrivo SQL che evita le estensioni.) –

+0

Quale DBMS stai usando? Oracolo? DB2? –

risposta

19

Se si guarda alla ALTER TABLE SYTAX

vedrete questo

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 ] 

Questo può essere ridotto a

ALTER TABLE { ALTER COLUMN column_name | ADD | DROP }

Secondo Transact-SQL Syntax Conventions (Transact-SQL) il | (barra verticale)

Separa gli elementi di sintassi racchiusi tra parentesi o parentesi. Puoi usare solo uno degli articoli.

Quindi non è possibile modificare, rilasciare o aggiungere in una singola istruzione. Hai anche i paren e la virgola che non funzionerà. Quindi avrete bisogno di

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

Se avete bisogno di loro di essere un'azione atomica basta per avvolgere nella transazione

+0

"_Se è necessario che siano un'azione atomica, è necessario eseguire il wrapping in transaction_" - Il DDL Oracle non causa commit impliciti? – Sepster

+0

O come in T-SQL: TABELLA ALTER Gradi DROP COLUMN Student_FamilyName, COLUMN Student_Name; –

1

Nel caso in cui il database è MySQL, si può fare in questo modo

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

Lavori in mysql 5.5.5

Problemi correlati