Alter Table Tambahkan Sintaks Kolom

142

Saya mencoba secara terprogram menambahkan kolom identitas ke tabel Karyawan. Tidak yakin apa yang saya lakukan salah dengan sintaks saya.

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]

Apa yang saya lakukan salah? Saya mencoba untuk mengekspor skrip, tetapi SQL Mgmt Studio melakukan seluruh Temp Table mengubah nama.

UPDATE : Saya pikir itu tercekik pada pernyataan pertama dengan "Sintaks salah di dekat kata kunci 'COLUMN'."

BuddyJoe
sumber

Jawaban:

195

Hapus saja COLUMNdariADD 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
sumber
9
Untuk memperjelas, kata kunci 'COLUMN' hanya valid (tetapi tidak diperlukan) di MySQL.
ethanbustad
4
@ethanbustad Ini juga berlaku untuk DB2 dan Postgres.
ᴠɪɴᴄᴇɴᴛ
3
Konyol bahwa mereka tidak hanya mengabaikan columnkata kunci dan membuatnya berfungsi seperti setiap DB lainnya di luar sana.
Bruce Pierson
FYI, Oracle berperilaku dengan cara yang sama seperti SQL Server dalam hal ini - keduanya tidak mengizinkan COLUMNdalam ADDpernyataan.
bsplosion
11

Beginilah cara Menambahkan kolom baru ke Tabel

ALTER TABLE [tableName]
ADD ColumnName Datatype

Misalnya

ALTER TABLE [Emp]
ADD Sr_No Int

Dan Jika Anda ingin membuatnya otomatis bertambah

ALTER TABLE [Emp]
ADD Sr_No Int IDENTITY(1,1) NOT NULL
Chirag Thakar
sumber
1
hmm hmm, wa siga wah
eirenaios
5

Sintaks yang benar untuk menambahkan kolom ke dalam tabel adalah:

ALTER TABLE table_name
  ADD column_name column-definition;

Dalam kasus Anda, itu akan menjadi:

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

Untuk menambahkan beberapa kolom, gunakan tanda kurung:

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

COLUMN kata kunci dalam SQL SERVER hanya digunakan untuk mengubah:

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

Itu bisa melakukan penggantian nama tabel temp jika Anda mencoba menambahkan kolom ke awal tabel (karena ini lebih mudah daripada mengubah urutan). Juga, jika ada data dalam tabel Karyawan, harus memasukkan pilih * sehingga dapat menghitung EmployeeID.

neouser99
sumber
1
"lebih mudah mengubah urutan" - Apakah maksud Anda adalah mungkin (walaupun lebih sulit) untuk mengubah urutan kolom tanpa membuat ulang tabel (melalui tabel temp)?
Örjan Jämte
1
Dalam basis data relasional, Anda seharusnya tidak pernah memiliki kebutuhan untuk ordinalitas kolom jadi jika Anda mencoba untuk memesan kolom dengan rapi, pertanyaannya adalah mengapa? Jika ordinalitas kolom begitu penting, mengapa tidak ada fungsi sepele untuk bertukar atau memperbaiki tata letak kolom? Alasannya adalah itu dirancang agar ordinalitas menjadi tidak penting.
Shiv