How to DROP multiple columns with a single ALTER TABLE statement in SQL Server?

后端 未结 13 932
星月不相逢
星月不相逢 2020-12-22 18:17

I would like to write a single SQL command to drop multiple columns from a single table in one ALTER TABLE statement.

From MSDN\'s ALTER TABLE documenta

相关标签:
13条回答
  • 2020-12-22 18:42

    The Syntax as specified by Microsoft for the dropping a column part of an ALTER statement is this

     DROP 
     {
         [ CONSTRAINT ] 
         { 
              constraint_name 
              [ WITH 
               ( <drop_clustered_constraint_option> [ ,...n ] ) 
              ] 
          } [ ,...n ]
          | COLUMN 
          {
              column_name 
          } [ ,...n ]
     } [ ,...n ]
    

    Notice that the [,...n] appears after both the column name and at the end of the whole drop clause. What this means is that there are two ways to delete multiple columns. You can either do this:

    ALTER TABLE TableName
        DROP COLUMN Column1, Column2, Column3
    

    or this

    ALTER TABLE TableName
        DROP 
            COLUMN Column1,
            COLUMN Column2,
            COLUMN Column3
    

    This second syntax is useful if you want to combine the drop of a column with dropping a constraint:

    ALTER TBALE TableName
        DROP
            CONSTRAINT DF_TableName_Column1,
            COLUMN Column1;
    

    When dropping columns SQL Sever does not reclaim the space taken up by the columns dropped. For data types that are stored inline in the rows (int for example) it may even take up space on the new rows added after the alter statement. To get around this you need to create a clustered index on the table or rebuild the clustered index if it already has one. Rebuilding the index can be done with a REBUILD command after modifying the table. But be warned this can be slow on very big tables. For example:

    ALTER TABLE Test
        REBUILD;
    
    0 讨论(0)
  • 2020-12-22 18:44

    Summarizing

    Oracle:

    ALTER TABLE table_name DROP (column_name1, column_name2);
    

    MS SQL Server:

    ALTER TABLE table_name DROP COLUMN column_name1, column_name2
    

    MySQL:

    ALTER TABLE table_name DROP column_name1, DROP column_name2;
    

    PostgreSQL

    ALTER TABLE table_name DROP COLUMN column_name1, DROP COLUMN column_name2;
    

    Be aware

    DROP COLUMN does not physically remove the data for some DBMS. E.g. for MS SQL. For fixed length types (int, numeric, float, datetime, uniqueidentifier etc) the space is consumed even for records added after the columns were dropped. To get rid of the wasted space do ALTER TABLE ... REBUILD.

    0 讨论(0)
  • 2020-12-22 18:45
    create table test (a int, b int , c int, d int);
    alter table test drop column b, d;
    

    Be aware that DROP COLUMN does not physically remove the data, and for fixed length types (int, numeric, float, datetime, uniqueidentifier etc) the space is consumed even for records added after the columns were dropped. To get rid of the wasted space do ALTER TABLE ... REBUILD.

    0 讨论(0)
  • 2020-12-22 18:45

    If it is just single column to delete the below syntax works

    ALTER TABLE tablename DROP COLUMN column1;

    For deleting multiple columns, using the DROP COLUMN doesnot work, the below syntax works

    ALTER TABLE tablename DROP (column1, column2, column3......);

    0 讨论(0)
  • 2020-12-22 18:48

    This may be late, but sharing it for the new users visiting this question. To drop multiple columns actual syntax is

    alter table tablename drop column col1, drop column col2 , drop column col3 ....
    

    So for every column you need to specify "drop column" in Mysql 5.0.45.

    0 讨论(0)
  • 2020-12-22 18:52

    Generic:

    ALTER TABLE table_name 
    DROP COLUMN column1,column2,column3;
    

    E.g:

    ALTER TABLE Student 
    DROP COLUMN Name, Number, City;
    
    0 讨论(0)
提交回复
热议问题