MSSQL: ย้าย / เพิ่ม column ก่อนหลัง column

Byphunsanit

MSSQL: ย้าย / เพิ่ม column ก่อนหลัง column

สิ่งหนึ่งที่ SQL Server ต่างจาก MySQL หรือโปรแกรม database อื่น ๆ คือ เมื่อต้องการเพิ่มคอลัมน์ในตารางเดิม มันทำได้เพียงเพิ่มในลำดับสุดท้ายของตารางเท่านั้น จัดเรียงตามที่ต้องการไม่ได้

ส่วน MariaDB หรือ MySQL ง่าย ๆ กว่าโดยใช้คำสั่ง SQL Server column เท่านั้นเอง

ALTER TABLE table_name
ADD COLUMN new_column_name data_type [column_constraints]
AFTER existing_column_name;

ส่วน SQL Server จะมีการทำมี่ซับซ้อนกว่านั้น โดย

  1. สร้าง table อีกตารางโดยมี column ที่มีโครงสร้างเหมือนกัน แต่ลำดับเป็นลำดับที่เรียงใหม่ หรือเพิ่ม column ใหม่
  2. copy data จากตารางเดิมไป ตารางใหม่โดย INSERT INTO SELECT โดยต้องทำให้ column ให้ตรงกันระหว่างตารางเก่าและใหม่
  3. เช็คข้อมูลว่าถูกต้องมั๋ย
  4. ลบ relation ตารางเก่า
  5. ลบตารางเก่า
  6. ทำ relation ใหม่

จะเห็นว่ามันวุ่นวายและพลาดได้ง่ายมาก ยังดีที่สามารถ config SQL Server Management Studio (SSMS) ให้ทำให้เราได้

  1. ไปที่เมนู Tools ที่ด้านบนของ SSMS
  2. เลือก Options
  3. ในหน้าต่าง Options ที่ปรากฏขึ้น ให้ขยายเมนู Designers
  4. เลือก Table and Database Designers
  5. หาตัวเลือก “Prevent saving changes that require table re-creation” แล้ว เอาเครื่องหมายถูกออก
  6. คลิก OK

จากนั้นไปที่ design ของตาราง

  1. backup และเช็คดี ๆ มันใช้ได้จริง ?
  2. เลือกตารางที่ต้องการแก้ใน design mode
  3. เพิ่มคอลัมน์ที่ต้องการ
  4. คลิกที่คอลัมน์ที่จะย้าย ด้านซ้ายสุดจะเห็นสามเหลี่ยมแสดงอยู่
  5. ลากขึ้นหรือลงไปที่จัดเรียงลำดับที่ต้องการ
  6. กด Save ด้านบน
  7. จะมี Safe Change Script ที่จะมี SQL Query ยาว ๆ มา
  8. ทางที่ดีคือ copy sql ไปทำเองที่ละขั้นตอน และ test เป็นชุด ๆ ไป อย่าลืมว่าข้อมูลสำคัญที่สุด แต่ถ้าเชื่อก็คลิก Yes
  9. ทดสอบทั้งโครงสร้างและข้อมูล

วิธีนี้มันจะสะดวกและผิดพลาดยากกว่าเขียน script เองเยอะ

About the author

phunsanit administrator