2013-04-13 30 views
16

Tôi đã thử các sau đây nhưng tôi có một lỗi cú phápLàm thế nào để bạn ADD và cột thả trong một TABLE ALTER đơn

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

Có thể thực hiện một DROP và một ADD trong báo cáo kết quả tương tự ALTER TABLE?

+3

Bạn không thể thực hiện thả và tạo bằng một câu lệnh thay đổi, tách riêng nó –

+1

Bạn chuyển sang PostgreSQL (ho), hỗ trợ [nhiều thay đổi] (http: //www.postgresql. hoặc là g/docs/currrent/static/sql-altertable.html) dưới dạng phần mở rộng cho cú pháp SQL chuẩn. (Nhưng mặc dù tôi sử dụng PostgreSQL rất nhiều, tôi * thường * viết SQL tránh các phần mở rộng.) –

+0

Bạn đang sử dụng DBMS nào? Oracle? DB2? –

Trả lời

19

Nếu bạn nhìn vào ALTER TABLE SYTAX

bạn sẽ thấy điều này

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 ] 

này có thể được giảm xuống còn

ALTER TABLE { ALTER COLUMN column_name | ADD | DROP }

Theo Transact-SQL Syntax Conventions (Transact-SQL) các | (thanh dọc)

Phân tách các mục cú pháp kèm theo trong ngoặc đơn hoặc dấu ngoặc ôm. Bạn chỉ có thể sử dụng một trong các mục.

Vì vậy, bạn không thể thay đổi, thả hoặc thêm trong một tuyên bố đơn lẻ. Bạn cũng có parens và dấu phẩy sẽ không hoạt động. Vì vậy, bạn sẽ cần

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

Nếu bạn cần họ là một hành động nguyên tử bạn chỉ cần quấn trong giao dịch

+0

"_Nếu bạn cần chúng là một hành động nguyên tử, bạn chỉ cần bọc trong transaction_" - Không Oracle DDL gây ra các cam kết ngầm định? – Sepster

+0

Hoặc như trong T-SQL: ALTER BẢNG Lớp DROP COLUMN Student_FamilyName, COLUMN Student_Name; –

1

Trong trường hợp cơ sở dữ liệu của bạn là Mysql, bạn có thể làm theo cách này

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

Hoạt động trong mysql 5.5.5

Các vấn đề liên quan