2009-04-27 11 views
108

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.Alterar tabla Agregar sintaxis de columna

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 la secuencia de comandos, pero SQL Mgmt Studio hace que toda la tabla de temperatura cambie de nombre.

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

Respuesta

160

Basta con retirar COLUMN de ADD 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] 
+5

Para aclarar, el La palabra clave 'COLUMN' es solo válida (pero n ot required) en MySQL. – ethanbustad

+1

@ethanbustad También es válido para DB2 y Postgres. –

0

Podría estar haciendo cambiar el nombre de la tabla temporal si está intentando agregar una columna para el comienzo de la mesa (ya que esto es más fácil que la alteración de la orden). Además, si hay datos en la tabla de Empleados, tiene que insertar insert select * para que pueda calcular el EmployeeID.

+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 volver a crear la tabla (a través de una tabla temporal)? –

+1

En una base de datos relacional, nunca debería tener la necesidad de la ordinalidad de las columnas, de modo que si está tratando de ordenar ordenadamente las columnas, la pregunta es ¿por qué? Si la ordinalidad de la columna era tan importante, ¿por qué no hay una función trivial para cambiar o corregir la ordinalidad de las columnas? La razón es que está diseñado para que la ordinalidad no importe. – Shiv

2

La sintaxis correcta para añadir la columna en la tabla es:

ALTER TABLE table_name 
    ADD column_name column-definition; 

En su caso, será:

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

Para añadir varias columnas utilizan paréntesis:

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; 
5

esto es cómo la adición de nueva columna a la tabla

ALTER TABLE [tableName] 
ADD ColumnName Datatype 

Ej

ALTER TABLE [Emp] 
ADD Sr_No Int 

Y Si usted quiere que sea automático incrementa

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