sql – 如何在单个ALTER TABLE中添加和删除列

我尝试了以下,但我有一个语法错误
ALTER TABLE Grades ( 
DROP COLUMN (Student_FamilyName,Student_Name),ADD Student_id INT );

是否可以在相同的ALTER TABLE语句中执行DROP和ADD?

解决方法

如果你看看 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 |添加| DROP}

根据Transact-SQL Syntax Conventions (Transact-SQL) (垂直条)

Separates Syntax items enclosed in brackets or braces. You can use only one of the items.

所以你不能在一个语句中改变,删除添加.你也有括号和逗号不起作用.所以你需要

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

如果你需要它们是一个原子行为,你只需要包装交易

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...