Alterar tabela Adicionar sintaxe de coluna

142

Estou tentando programaticamente adicionar uma coluna de identidade a uma tabela Funcionários. Não tenho certeza do que estou fazendo de errado com minha sintaxe.

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]

O que estou fazendo de errado? Tentei exportar o script, mas o SQL Mgmt Studio faz uma coisa toda renomear a tabela temporária.

UPDATE : Acho que está sufocando a primeira instrução com "Sintaxe incorreta perto da palavra-chave 'COLUMN'".

BuddyJoe
fonte

Respostas:

195

Basta remover COLUMNdeADD 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]
Vikram
fonte
9
Para esclarecer, a palavra-chave 'COLUMN' é válida apenas (mas não é necessária) no MySQL.
ethanbustad
4
@ethanbustad Também é válido para DB2 e Postgres.
ᴠɪɴᴄᴇɴᴛ
3
É ridículo que eles não apenas ignorem a columnpalavra - chave e a façam funcionar como todos os outros bancos de dados existentes.
Bruce Pierson
FYI, o Oracle se comporta da mesma maneira que o SQL Server neste caso - ambos não permitem COLUMNna ADDdeclaração.
bsplosion
11

É assim que Adicionando Nova Coluna à Tabela

ALTER TABLE [tableName]
ADD ColumnName Datatype

Por exemplo

ALTER TABLE [Emp]
ADD Sr_No Int

E se você quiser torná-lo incrementado automaticamente

ALTER TABLE [Emp]
ADD Sr_No Int IDENTITY(1,1) NOT NULL
Chirag Thakar
fonte
hmm hmm, wa siga wah
eirenaios
5

A sintaxe correta para adicionar coluna à tabela é:

ALTER TABLE table_name
  ADD column_name column-definition;

No seu caso, será:

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

Para adicionar várias colunas, use colchetes:

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

COLUMN A palavra-chave no SQL SERVER é usada apenas para alterar:

ALTER TABLE table_name
  ALTER COLUMN column_name column_type;
Dzianis Yafimau
fonte
0

Pode estar renomeando a tabela temporária se você estiver tentando adicionar uma coluna ao início da tabela (pois isso é mais fácil do que alterar a ordem). Além disso, se houver dados na tabela Funcionários, é necessário inserir select * para calcular o Código do Empregado.

neouser99
fonte
1
"mais fácil que alterar a ordem" - Você quer dizer que é possível (embora seja mais difícil) alterar a ordem das colunas sem recriar a tabela (por meio de uma tabela temporária)?
Örjan Jämte
1
Em um banco de dados relacional, você nunca deve ter a necessidade de ordinalidade das colunas. Se você está tentando ordenar ordenadamente as colunas, a pergunta é por que? Se a ordinalidade da coluna era tão importante, por que não existe uma função trivial para trocar ou corrigir a ordinalidade das colunas? O motivo é que ele foi projetado para que a ordinalidade não importasse.
Shiv