Tabelle ändern Spaltensyntax hinzufügen

142

Ich versuche, einer Tabelle Mitarbeiter programmgesteuert eine Identitätsspalte hinzuzufügen. Ich bin mir nicht sicher, was ich mit meiner Syntax falsch mache.

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]

Was mache ich falsch? Ich habe versucht, das Skript zu exportieren, aber SQL Mgmt Studio führt eine vollständige Umbenennung der temporären Tabelle durch.

UPDATE : Ich denke, es erstickt an der ersten Anweisung mit "Falsche Syntax in der Nähe des Schlüsselworts 'COLUMN'".

BuddyJoe
quelle

Antworten:

195

Einfach entfernen COLUMNvonADD 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
quelle
9
Zur Verdeutlichung ist das Schlüsselwort 'COLUMN' nur in MySQL gültig (aber nicht erforderlich).
Ethanbustad
4
@ethanbustad Es gilt auch für DB2 und Postgres.
2.
3
Es ist lächerlich, dass sie das columnSchlüsselwort nicht einfach ignorieren und dafür sorgen, dass es wie jede andere Datenbank funktioniert.
Bruce Pierson
Zu Ihrer Information, Oracle verhält sich in diesem Fall genauso wie SQL Server - beide sind COLUMNin der ADDAnweisung nicht zulässig .
bsplosion
10

So fügen Sie der Tabelle eine neue Spalte hinzu

ALTER TABLE [tableName]
ADD ColumnName Datatype

Z.B

ALTER TABLE [Emp]
ADD Sr_No Int

Und wenn Sie es automatisch inkrementieren möchten

ALTER TABLE [Emp]
ADD Sr_No Int IDENTITY(1,1) NOT NULL
Chirag Thakar
quelle
5

Die korrekte Syntax zum Hinzufügen einer Spalte zur Tabelle lautet:

ALTER TABLE table_name
  ADD column_name column-definition;

In Ihrem Fall wird es sein:

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

Verwenden Sie Klammern, um mehrere Spalten hinzuzufügen:

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

COLUMN Das Schlüsselwort in SQL SERVER wird nur zum Ändern verwendet:

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

Es kann sein, dass die temporäre Tabelle umbenannt wird, wenn Sie versuchen, eine Spalte am Anfang der Tabelle hinzuzufügen (da dies einfacher ist als das Ändern der Reihenfolge). Wenn die Employees-Tabelle Daten enthält, muss select * eingefügt werden, damit die EmployeeID berechnet werden kann.

neouser99
quelle
1
"Einfacher als das Ändern der Reihenfolge" - Meinen Sie, dass es möglich ist (obwohl es schwieriger ist), die Reihenfolge der Spalten zu ändern, ohne die Tabelle neu zu erstellen (über eine temporäre Tabelle)?
Örjan Jämte
1
In einer relationalen Datenbank sollte die Ordinalität der Spalten niemals benötigt werden. Wenn Sie also versuchen, die Spalten ordentlich zu ordnen, stellt sich die Frage, warum. Wenn die Ordinalität von Spalten so wichtig war, warum gibt es dann keine triviale Funktion zum Austauschen oder Festlegen der Ordinalität von Spalten? Der Grund dafür ist, dass die Ordinalität keine Rolle spielt.
Shiv