Bảng thay đổi Thêm cú pháp cột


142

Tôi đang cố gắng lập trình thêm một cột định danh vào bảng Nhân viên. Không chắc chắn những gì tôi đang làm sai với cú pháp của tôi.

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]

Tôi đang làm gì sai? Tôi đã cố gắng xuất tập lệnh, nhưng SQL Mgmt Studio thực hiện toàn bộ việc đổi tên Temp Table.

CẬP NHẬT : Tôi nghĩ rằng nó đang nghẹt thở trong câu lệnh đầu tiên với "Cú pháp không chính xác gần từ khóa 'CỘT'."

Câu trả lời:


195

Chỉ cần xóa COLUMNkhỏiADD 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
Để làm rõ, từ khóa 'COLUMN' chỉ hợp lệ (nhưng không bắt buộc) trong MySQL.
ethanbustad

4
@ethanbustad Nó cũng hợp lệ đối với DB2 và Postgres.
ᴠɪɴᴄᴇɴᴛ

3
Vô lý là họ không bỏ qua columntừ khóa và làm cho nó hoạt động như mọi DB khác ngoài kia.
Bruce Pierson

FYI, Oracle hành xử giống như SQL Server trong trường hợp này - cả hai đều không cho phép COLUMNtrong ADDtuyên bố.
bsplumping

10

Đây là cách Thêm cột mới vào Bảng

ALTER TABLE [tableName]
ADD ColumnName Datatype

Ví dụ

ALTER TABLE [Emp]
ADD Sr_No Int

Và nếu bạn muốn làm cho nó tự động tăng lên

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

5

Cú pháp đúng để thêm cột vào bảng là:

ALTER TABLE table_name
  ADD column_name column-definition;

Trong trường hợp của bạn, nó sẽ là:

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

Để thêm nhiều cột, sử dụng dấu ngoặc:

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

COLUMN từ khóa trong SQL SERVER chỉ được sử dụng để thay đổi:

ALTER TABLE table_name
  ALTER COLUMN column_name column_type;

0

Nó có thể được thực hiện đổi tên bảng tạm thời nếu bạn đang cố thêm một cột vào đầu bảng (vì điều này dễ hơn thay đổi thứ tự). Ngoài ra, nếu có dữ liệu trong bảng Nhân viên, nó phải thực hiện chèn select * để nó có thể tính toán EmployeeID.


1
"Dễ dàng hơn trong việc thay đổi thứ tự" - Bạn có nghĩa là có thể (mặc dù khó khăn hơn) để thay đổi thứ tự của các cột mà không cần tạo lại bảng (thông qua bảng tạm thời)?
janrjan Jämte

1
Trong một cơ sở dữ liệu quan hệ, bạn sẽ không bao giờ có nhu cầu về quy tắc của các cột vì vậy nếu bạn đang cố gắng sắp xếp gọn gàng các cột, câu hỏi là tại sao? Nếu quy tắc cột là rất quan trọng, tại sao không có chức năng tầm thường để trao đổi hoặc sửa chữa quy tắc của cột? Lý do là nó được thiết kế cho thông thường để không quan trọng.
Shiv
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.