2009-04-27 12 views
108

Ich versuche, einer Tabelle Mitarbeiter eine Identitätsspalte hinzuzufügen. Nicht sicher, was ich mit meiner Syntax falsch mache.Tabelle ändern Spalte hinzufügen Syntax

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 macht eine ganze Umbenennung der Temp-Tabelle.

UPDATE: ich denke, es mit auf der ersten Anweisung erstickt „falsche Syntax nahe dem Schlüsselwort‚column‘.“

Antwort

160

Entfernen Sie einfach COLUMN von 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

, Zur Klärung der Das Schlüsselwort 'COLUMN' ist nur gültig (aber n ot erforderlich) in MySQL. – ethanbustad

+1

@ethanbustad Dies gilt auch für DB2 und Postgres. –

0

Es könnte die temporäre Tabelle tun umbenennen, wenn Sie eine Spalte zu Beginn der Tabelle hinzufügen möchten (da dies einfacher ist als die Reihenfolge zu ändern). Wenn Daten in der Employees-Tabelle vorhanden sind, müssen Sie insert select * eingeben, damit die EmployeeID berechnet werden kann.

+1

"einfacher, dass die Reihenfolge geändert wird" - meinen Sie, dass es möglich ist (obwohl es schwieriger ist), die Reihenfolge der Spalten zu ändern, ohne die Tabelle neu zu erstellen (durch eine temporäre Tabelle)? –

+1

In einer relationalen Datenbank sollten Sie nie die Ordnungsmäßigkeit der Spalten benötigen. Wenn Sie also versuchen, die Spalten ordentlich zu ordnen, lautet die Frage warum? Wenn die Spaltenordnung so wichtig ist, warum gibt es dann keine triviale Funktion, um die Ordnungen von Spalten zu vertauschen oder zu ändern? Der Grund dafür ist, dass die Ordinalität keine Rolle spielt. – Shiv

2

Die korrekte Syntax für Spalte in Tabelle hinzugefügt ist:

ALTER TABLE table_name 
    ADD column_name column-definition; 

In Ihrem Fall wird es sein:

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

COLUMN:

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

mehrere Spalten verwenden Klammern hinzuzufügen Schlüsselwort in SQL SERVER wird nur zum Ändern verwendet:

ALTER TABLE table_name 
    ALTER COLUMN column_name column_type; 
5

Dies wird, wie neue Spalte der Tabelle Hinzufügen

ALTER TABLE [tableName] 
ADD ColumnName Datatype 

Eg

ALTER TABLE [Emp] 
ADD Sr_No Int 

Und wenn Sie wollen, dass es Auto

erhöht machen
ALTER TABLE [Emp] 
ADD Sr_No Int IDENTITY(1,1) NOT NULL 
Verwandte Themen