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

标签 sql syntax alter-table

我尝试了以下操作,但出现语法错误

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

是否可以执行 DROP和一个 ADD在同一 ALTER TABLE陈述?

最佳答案

如果你看 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) | (竖条)

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;

如果你需要它们是一个原子 Action ,你只需要包装在事务中

关于sql - 如何在单个 ALTER TABLE 中添加和删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15989527/

相关文章:

javascript - `if (0 in array)`——这合法吗?

c# - 不一致的语法 c#?

MySQL删除外键错误152

Android Sqlite 添加列后根据条件选择条目

phpMyAdmin sql 面板正在将字符串插入为列

在准备好的语句中抛出 SQL 异常

SQL查找条件不存在的最新日期

sql-server - 将 NOT NULL 列插入现有表

php - SQL 查询 2 行并且只显示一次具有相同的值

sql将两个不相关的表合并为一个