2013-04-13 19 views
16

我嘗試以下,但我得到了一個語法錯誤你如何添加和刪除列在一個單一的ALTER TABLE

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

是否有可能進行DROP並在同ALTER TABLE聲明的ADD

+3

你不能做降和一個ALTER語句創建,分開吧 –

+1

您切換到PostgreSQL(咳嗽),支持[多變化(HTTP://www.postgresql。要麼g/docs/currrent/static/sql-altertable.html)作爲標準SQL語法的擴展。 (但是,即使我使用PostgreSQL很多,我通常會*編寫SQL來避免擴展。) –

+0

您正在使用哪些DBMS?甲骨文? DB2? –

回答

19

如果你看一下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 Syntax Conventions (Transact-SQL)| (豎線)

分隔括號或大括號中的語法項目。您只能使用其中一個項目。

所以你不能在一個語句中修改,刪除或添加。你也有parens和逗號不起作用。所以,你需要

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

如果你需要他們,你只需要在交易

+0

「_If你需要它們是一個原子操作,你只需要在transaction_中包裝」 - Oracle DDL是否會導致隱含的提交? – Sepster

+0

或如在T-SQL中: ALTER TABLE Grades DROP COLUMN Student_FamilyName,COLUMN Student_Name; –

1

如果你的數據庫是MySQL來包裝一個原子操作,你能做到這樣

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

作品在MySQL 5.5.5

相關問題