更改表添加列语法


142

我试图以编程方式将标识列添加到表Employees。不知道我的语法出了什么问题。

ALTER TABLE Employees
  ADD COLUMN EmployeeID int NOT NULL IDENTITY (1, 1)

ALTER TABLE Employees ADD CONSTRAINT
    PK_Employees PRIMARY KEY CLUSTERED 
    (
      EmployeeID
    ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
    ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

我究竟做错了什么?我试图导出脚本,但是SQL Mgmt Studio会执行整个Temp Table重命名的操作。

更新:我认为第一条语句“关键字'COLUMN'附近的语法不正确”令人窒息。

Answers:


195

只需COLUMNADD COLUMN

ALTER TABLE Employees
  ADD EmployeeID numeric NOT NULL IDENTITY (1, 1)

ALTER TABLE Employees ADD CONSTRAINT
        PK_Employees PRIMARY KEY CLUSTERED 
        (
          EmployeeID
        ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
        ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

9
为了明确起见,“ COLUMN”关键字仅在MySQL中有效(但不是必需的)。
ethanbustad 2015年

4
@ethanbustad对DB2和Postgres也有效。
ᴠɪɴᴄᴇɴᴛ

3
荒谬的是,他们不仅忽略了column关键字,而且使它像其他所有数据库一样工作。
布鲁斯·皮尔森

仅供参考,在这种情况下,Oracle的行为与SQL Server相同-两者都不允许COLUMNADD语句中使用。
bsplosion

10

这是向表添加新列的方式

ALTER TABLE [tableName]
ADD ColumnName Datatype

例如

ALTER TABLE [Emp]
ADD Sr_No Int

如果要使其自动递增

ALTER TABLE [Emp]
ADD Sr_No Int IDENTITY(1,1) NOT NULL

5

将列添加到表中的正确语法是:

ALTER TABLE table_name
  ADD column_name column-definition;

在您的情况下,它将是:

ALTER TABLE Employees
  ADD EmployeeID int NOT NULL IDENTITY (1, 1)

要添加多列,请使用方括号:

ALTER TABLE table_name
  ADD (column_1 column-definition,
       column_2 column-definition,
       ...
       column_n column_definition);

COLUMN SQL SERVER中的关键字仅用于更改:

ALTER TABLE table_name
  ALTER COLUMN column_name column_type;

0

如果您尝试在表的开头添加一列,则可能正在对临时表进行重命名(因为这比更改顺序更容易)。另外,如果Employees表中有数据,则必须插入select *,以便可以计算EmployeeID。


1
“更容易更改顺序”-您是说有可能(尽管更困难)更改列的顺序而无需重新创建表(通过临时表)吗?
与OrjanJämte

1
在关系数据库中,您永远不需要列的序数,因此,如果您要对列进行整齐的排序,问题是为什么?如果列序非常重要,为什么没有平凡的功能来交换或修复列序?原因是它是为普通性而设计的,无关紧要。
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.