Zmień składnię tabeli Dodaj kolumnę


142

Próbuję programowo dodać kolumnę tożsamości do tabeli Pracownicy. Nie wiem, co robię źle w mojej składni.

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]

Co ja robię źle? Próbowałem wyeksportować skrypt, ale SQL Mgmt Studio zmienia nazwę całej tabeli tymczasowej.

AKTUALIZACJA : Myślę, że dławi się pierwszą instrukcją z „Nieprawidłowa składnia w pobliżu słowa kluczowego 'COLUMN'”.

Odpowiedzi:


195

Po prostu usuń COLUMNzADD 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
Aby wyjaśnić, słowo kluczowe „COLUMN” jest poprawne (ale nie wymagane) tylko w MySQL.
ethanbustad

4
@ethanbustad Dotyczy to także DB2 i Postgres.
ᴠɪɴᴄᴇɴᴛ

3
Śmieszne, że nie ignorują columnsłowa kluczowego i sprawiają, że działa jak każdy inny DB.
Bruce Pierson

FYI, Oracle zachowuje się w tym przypadku tak samo jak SQL Server - oba nie pozwalają COLUMNw ADDinstrukcji.
bsplosion

11

Oto sposób dodawania nowej kolumny do tabeli

ALTER TABLE [tableName]
ADD ColumnName Datatype

Na przykład

ALTER TABLE [Emp]
ADD Sr_No Int

A jeśli chcesz, aby był automatycznie zwiększany

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

1
hmm hmm, wa siga wah
eirenaios

5

Prawidłowa składnia dodawania kolumny do tabeli to:

ALTER TABLE table_name
  ADD column_name column-definition;

W Twoim przypadku będzie to:

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

Aby dodać wiele kolumn, użyj nawiasów:

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

COLUMN słowo kluczowe w SQL SERVER służy tylko do zmiany:

ALTER TABLE table_name
  ALTER COLUMN column_name column_type;

0

Może to powodować zmianę nazwy tabeli tymczasowej, jeśli próbujesz dodać kolumnę na początku tabeli (ponieważ jest to łatwiejsze niż zmiana kolejności). Ponadto, jeśli w tabeli Employees znajdują się dane, należy wstawić select *, aby mógł obliczyć EmployeeID.


1
„łatwiejszy niż zmiana kolejności” - czy masz na myśli, że jest możliwa (chociaż jest to trudniejsza) zmiana kolejności kolumn bez ponownego tworzenia tabeli (za pomocą tabeli tymczasowej)?
Örjan Jämte

1
W relacyjnej bazie danych nigdy nie powinieneś mieć potrzeby stosowania porządkowania kolumn, więc jeśli próbujesz starannie uporządkować kolumny, pytanie brzmi: dlaczego? Jeśli porządek kolumn był tak ważny, dlaczego nie ma trywialnej funkcji do zamiany lub naprawienia porządkowości kolumn? Powodem jest to, że porządek nie ma znaczenia.
Shiv
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.