Alterar tabla Agregar sintaxis de columna

142

Estoy tratando de agregar mediante programación una columna de identidad a una tabla Empleados. No estoy seguro de lo que estoy haciendo mal con mi sintaxis.

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]

¿Qué estoy haciendo mal? Traté de exportar el script, pero SQL Mgmt Studio hace todo un cambio de nombre de la tabla temporal.

ACTUALIZACIÓN : Creo que se está ahogando en la primera declaración con "Sintaxis incorrecta cerca de la palabra clave 'COLUMNA'".

BuddyJoe
fuente

Respuestas:

195

Solo eliminar 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
fuente
9
Para aclarar, la palabra clave 'COLUMNA' solo es válida (pero no requerida) en MySQL.
ethanbustad
44
@ethanbustad También es válido para DB2 y Postgres.
ᴠɪɴᴄᴇɴᴛ
3
Ridículo que no solo ignoran la columnpalabra clave y hacen que funcione como cualquier otra base de datos.
Bruce Pierson el
Para su información, Oracle se comporta de la misma manera que SQL Server en este caso, ambos no se permiten COLUMNen la ADDdeclaración.
bsplosion
11

Así es como Agregar nueva columna a la Tabla

ALTER TABLE [tableName]
ADD ColumnName Datatype

P.ej

ALTER TABLE [Emp]
ADD Sr_No Int

Y si quieres hacer que se incremente automáticamente

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

La sintaxis correcta para agregar columnas a la tabla es:

ALTER TABLE table_name
  ADD column_name column-definition;

En tu caso será:

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

Para agregar varias columnas use corchetes:

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

COLUMN La palabra clave en SQL SERVER se usa solo para alterar:

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

Podría estar cambiando el nombre de la tabla temporal si está tratando de agregar una columna al comienzo de la tabla (ya que esto es más fácil que modificar el orden). Además, si hay datos en la tabla Empleados, debe insertar insert * para poder calcular el Id. De empleado.

neouser99
fuente
1
"más fácil que alterar el orden" - ¿Quiere decir que es posible (aunque es más difícil) alterar el orden de las columnas sin recrear la tabla (a través de una tabla temporal)?
Örjan Jämte
1
En una base de datos relacional, nunca debe tener la necesidad de la ordinalidad de las columnas, por lo que si está tratando de ordenar las columnas con cuidado, la pregunta es ¿por qué? Si la ordinalidad de la columna era tan importante, ¿por qué no hay una función trivial para intercambiar o arreglar la ordinalidad de las columnas? La razón es que está diseñada para que la ordinalidad no importe.
Shiv