2009-04-27 24 views
108

Sto tentando di aggiungere una colonna Identity a una tabella Impiegati. Non sono sicuro di cosa sto facendo male con la mia sintassi.Modifica tabella Aggiungi colonna Sintassi

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] 

Cosa sto facendo male? Ho provato ad esportare lo script, ma SQL Mgmt Studio fa un intero rinvio di Temp Table.

UPDATE: Penso che sta soffocando sulla prima dichiarazione con "Sintassi non corretta in prossimità della parola chiave 'colonna'."

risposta

160

Basta togliere COLUMN da 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

Per chiarire, il La parola chiave "COLUMN" è valida solo (ma n richiesto) in MySQL. – ethanbustad

+1

@ethanbustad È valido anche per DB2 e Postgres. –

0

Si potrebbe fare la tabella temporanea rinomina se si sta cercando di aggiungere una colonna all'inizio della tabella (come questo è più facile che alterare l'ordine). Inoltre, se sono presenti dati nella tabella Impiegati, deve inserire select * in modo che possa calcolare EmployeeID.

+1

"più facile che modificare l'ordine" - Intendi dire che è possibile (anche se è più difficile) modificare l'ordine delle colonne senza ricreare la tabella (attraverso una tabella temporanea)? –

+1

In un database relazionale, non dovresti mai avere l'ordinalità delle colonne, quindi se stai cercando di ordinare ordinatamente le colonne, la domanda è: perché? Se l'ordinalità delle colonne fosse così importante, perché non c'è una funzione banale da scambiare o fissare ordinalità di colonne? La ragione è che non è importante che l'ordinalità sia progettata. – Shiv

2

La sintassi corretta per l'aggiunta di colonna nella tabella è:

ALTER TABLE table_name 
    ADD column_name column-definition; 

Nel tuo caso sarà:

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

Per aggiungere più colonne utilizzano staffe:

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

COLUMN la parola chiave in SQL SERVER viene utilizzata solo per la modifica:

ALTER TABLE table_name 
    ALTER COLUMN column_name column_type; 
5

Questo è come l'aggiunta di nuova colonna alla tabella

ALTER TABLE [tableName] 
ADD ColumnName Datatype 

Eg

ALTER TABLE [Emp] 
ADD Sr_No Int 

e se si vuole rendere automatica incrementato

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