แก้ไขตารางเพิ่มไวยากรณ์คอลัมน์


142

ฉันกำลังพยายามเพิ่มคอลัมน์ข้อมูลประจำตัวโดยทางโปรแกรมในตารางพนักงาน ไม่แน่ใจในสิ่งที่ฉันทำผิดกับไวยากรณ์ของฉัน

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]

ผมทำอะไรผิดหรือเปล่า? ฉันพยายามส่งออกสคริปต์ แต่ SQL Mgmt Studio ทำการเปลี่ยนชื่อ Temp Table ทั้งหมด

อัปเดต : ฉันคิดว่าข้อความนี้สำลักในข้อความแรกด้วย "ไวยากรณ์ไม่ถูกต้องใกล้กับคำหลัก" COLUMN "

คำตอบ:


195

เพียง แต่เอาCOLUMNจาก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]

9
เพื่อชี้แจงคำหลัก 'COLUMN' นั้นถูกต้อง (แต่ไม่จำเป็น) ใน MySQL
ethanbustad

4
@ethanbustad นอกจากนี้ยังสามารถใช้ได้กับ DB2 และ Postgres
ᴠɪɴᴄᴇɴᴛ

3
ไร้สาระที่พวกเขาไม่เพียงเพิกเฉยcolumnคำหลักและทำให้มันทำงานได้เหมือนกับฐานข้อมูลอื่น ๆ
Bruce Pierson

FYI, Oracle ทำงานในลักษณะเดียวกันกับ SQL Server ในกรณีนี้ - ทั้งสองไม่อนุญาตCOLUMNในADDคำสั่ง
bsplosion

11

นี่คือวิธีการเพิ่มคอลัมน์ใหม่ลงในตาราง

ALTER TABLE [tableName]
ADD ColumnName Datatype

เช่น

ALTER TABLE [Emp]
ADD Sr_No Int

และถ้าคุณต้องการทำให้มันเพิ่มขึ้นอัตโนมัติ

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

1
hmm hmm, wa siga wah
eirenaios

5

ไวยากรณ์ที่ถูกต้องสำหรับการเพิ่มคอลัมน์ลงในตารางคือ:

ALTER TABLE table_name
  ADD column_name column-definition;

ในกรณีของคุณมันจะเป็น:

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

ในการเพิ่มหลายคอลัมน์ให้ใช้เครื่องหมายวงเล็บ:

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

COLUMN คีย์เวิร์ดใน SQL SERVER ใช้สำหรับการแก้ไขเท่านั้น:

ALTER TABLE table_name
  ALTER COLUMN column_name column_type;

0

อาจเป็นการเปลี่ยนชื่อตาราง temp หากคุณพยายามเพิ่มคอลัมน์ไปยังจุดเริ่มต้นของตาราง (เนื่องจากง่ายกว่าการเปลี่ยนลำดับ) นอกจากนี้หากมีข้อมูลในตารางพนักงานจะต้องทำการแทรก select * เพื่อให้สามารถคำนวณ EmployeeID ได้


1
"ง่ายกว่าที่เปลี่ยนลำดับ" - คุณหมายถึงเป็นไปได้ (แม้ว่าจะยากกว่า) ในการแก้ไขลำดับของคอลัมน์โดยไม่สร้างตารางขึ้นมาใหม่ (ผ่านตารางชั่วคราว)?
ÖrjanJämte

1
ในฐานข้อมูลเชิงสัมพันธ์คุณไม่ควรมีความต้องการลำดับของคอลัมน์ดังนั้นหากคุณพยายามเรียงลำดับคอลัมน์อย่างเป็นระเบียบคำถามคือทำไม? หากคอลัมน์ของคอลัมน์มีความสำคัญมากเหตุใดจึงไม่มีฟังก์ชั่นเล็ก ๆ น้อย ๆ ในการสลับหรือแก้ไขลำดับของคอลัมน์ เหตุผลก็คือมันถูกออกแบบมาเพื่อความปกติไม่ใช่เรื่องสำคัญ
ชีฟ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.