Modifica tabella Aggiungi sintassi colonna


142

Sto cercando di aggiungere a livello di codice una colonna di identità a una tabella Dipendenti. Non sono sicuro di cosa sto facendo di sbagliato con la mia 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]

Che cosa sto facendo di sbagliato? Ho provato ad esportare lo script, ma SQL Mgmt Studio fa una cosa intera rinominando la tabella Temp.

AGGIORNAMENTO : Penso che si stia soffocando nella prima frase con "Sintassi errata vicino alla parola chiave" COLONNA "."

Risposte:


195

Rimuovi COLUMNdaADD 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
Per chiarire, la parola chiave "COLONNA" è valida (ma non obbligatoria) in MySQL.
ethanbustad,

4
@ethanbustad È valido anche per DB2 e Postgres.
ᴠɪɴᴄᴇɴᴛ

3
Ridicolo che non ignorano semplicemente la columnparola chiave e la fanno funzionare come tutti gli altri DB là fuori.
Bruce Pierson,

Cordiali saluti, si comporta di Oracle nello stesso modo in cui SQL Server in questo caso - sia non consentono COLUMNnella ADDdichiarazione.
bsplosion,

11

Ecco come aggiungere una nuova colonna alla tabella

ALTER TABLE [tableName]
ADD ColumnName Datatype

Per esempio

ALTER TABLE [Emp]
ADD Sr_No Int

E se vuoi renderlo auto incrementato

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

1
hmm hmm, wa siga wah
eirenaios

5

La sintassi corretta per l'aggiunta della 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 usa le parentesi:

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

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

ALTER TABLE table_name
  ALTER COLUMN column_name column_type;

0

Potrebbe essere necessario rinominare la tabella temporanea se si sta tentando di aggiungere una colonna all'inizio della tabella (poiché è più semplice che modificare l'ordine). Inoltre, se nella tabella Employees sono presenti dei dati, è necessario inserire select * in modo da poter calcolare EmployeeID.


1
"più facile che alterare l'ordine" - Vuoi dire che è possibile (anche se è più difficile) modificare l'ordine delle colonne senza ricreare la tabella (attraverso una tabella temporanea)?
Örjan Jämte,

1
In un database relazionale, non dovresti mai avere bisogno dell'ordinalità delle colonne, quindi se stai cercando di ordinare ordinatamente le colonne, la domanda è perché? Se l'ordinalità delle colonne era così importante, perché non esiste una funzione banale per scambiare o correggere l'ordinalità delle colonne? Il motivo è che l'ordinalità non ha importanza.
Shiv,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.