ฉันจะเปลี่ยนชื่อคอลัมน์ในตารางฐานข้อมูลโดยใช้ SQL ได้อย่างไร


113

หากฉันต้องการเปลี่ยนชื่อคอลัมน์ (ไม่เปลี่ยนประเภทหรือข้อ จำกัด เพียงแค่ชื่อ) ในฐานข้อมูล SQL โดยใช้ SQL ฉันจะทำอย่างไร หรือเป็นไปไม่ได้?

นี่สำหรับฐานข้อมูลใด ๆ ที่อ้างว่าสนับสนุน SQL ฉันเพียงแค่มองหาแบบสอบถามเฉพาะ SQL ที่จะทำงานโดยไม่คำนึงถึงการใช้ฐานข้อมูลจริง


2
Skaffman ที่สองนี่ไม่ใช่คำถาม "SQL" แต่อาจเป็นคำถาม "SQLServer"
Tony Andrews

1
ระบบฐานข้อมูลใด ๆ ที่อ้างว่าใช้ SQL Oracle, MySQL และอื่น ๆ ... ฉันกำลังมองหาคำตอบที่ไม่ขึ้นกับฐานข้อมูล
MetroidFan2002

คำตอบ:


97

ใน PostgreSQL (และ RDBMS อื่น ๆ อีกมากมาย) คุณสามารถทำได้ด้วยALTER TABLEคำสั่งปกติ:

=> SELECT * FROM Test1;
 id | foo | bar 
----+-----+-----
  2 |   1 |   2

=> ALTER TABLE Test1 RENAME COLUMN foo TO baz;
ALTER TABLE

=> SELECT * FROM Test1;
 id | baz | bar 
----+-----+-----
  2 |   1 |   2

10
สิ่งนี้ไม่รองรับใน MySQL ใช่หรือไม่?
ustun

5
ไม่ไม่รองรับ MySQL
rick

4
นอกจากนี้ยังไม่รองรับใน Microsoft SQL Server แทนที่จะใช้sp_renameตามคำตอบของ Galwegian: stackoverflow.com/a/174586/834431
Chris

ฉันเชื่อว่า MySQL 8.0 รองรับไวยากรณ์นี้แล้ว
Dan

118

โดยเฉพาะสำหรับ SQL Server ให้ใช้ sp_rename

USE AdventureWorks;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO

ดูเหมือนว่าเฉพาะ Microsoft และไม่มีสิ่งใดในแบบสอบถามดั้งเดิมที่ระบุ Microsoft DBMS
bortzmeyer

1
ใช่คำตอบที่ฉันต้องการคือ SQL "มาตรฐาน" และไม่ได้ขึ้นอยู่กับการนำไปใช้งานใด ๆ อย่างไรก็ตามเป็นคำตอบที่ดีสำหรับทุกคนที่ใช้ระบบของไมโครซอฟต์
MetroidFan2002

35

ใน MySQL ไวยากรณ์คือALTER TABLE ... CHANGE:

ALTER TABLE <table_name> CHANGE <column_name> <new_column_name> <data_type> ...

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


มีการทดสอบในฐานข้อมูล mySQL
jaspher chloe

2
เราสามารถเปลี่ยนชื่อคอลัมน์ได้โดยไม่ส่งผลต่อ type / constraint กับRENAMEsyntax เปลี่ยนชื่อคอลัมน์ใน MySQL
Lukasz Szozda

21

น่าเสียดายสำหรับโซลูชันที่เป็นอิสระจากฐานข้อมูลคุณจะต้องรู้ทุกอย่างเกี่ยวกับคอลัมน์นี้ หากใช้ในตารางอื่นเป็นคีย์ต่างประเทศก็จะต้องแก้ไขเช่นกัน

ALTER TABLE MyTable ADD MyNewColumn OLD_COLUMN_TYPE;
UPDATE MyTable SET MyNewColumn = MyOldColumn;
-- add all necessary triggers and constraints to the new column...
-- update all foreign key usages to point to the new column...
ALTER TABLE MyTable DROP COLUMN MyOldColumn;

สำหรับกรณีที่ง่ายที่สุด (ไม่มีข้อ จำกัด ทริกเกอร์ดัชนีหรือคีย์) จะใช้ 3 บรรทัดข้างต้น สำหรับสิ่งที่ซับซ้อนมากขึ้นอาจทำให้ยุ่งมากเมื่อคุณเติมเต็มส่วนที่ขาดหายไป

อย่างไรก็ตามตามที่กล่าวไว้ข้างต้นมีวิธีการเฉพาะฐานข้อมูลที่ง่ายกว่าหากคุณทราบว่าต้องแก้ไขฐานข้อมูลใดก่อนเวลา


ตอบคำถามโดยตรงแม้ว่าจะไม่ตรงกับสิ่งที่ผู้ถามกำลังมองหาก็ตาม ...
Lambart

ในความคิดเห็นนั้น OP ชี้แจงว่านี่คือสิ่งที่เขากำลังมองหา
MagneTism

20

ฉันคิดว่านี่เป็นวิธีที่ง่ายที่สุดในการเปลี่ยนชื่อคอลัมน์

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'

สิ่งนี้ใช้ได้กับฉันบน SQL Server ฉันไม่แน่ใจว่าสิ่งนี้ใช้ได้กับ DBMS อื่นหรือไม่
Nic

9

ใน Informix คุณสามารถใช้:

RENAME COLUMN TableName.OldName TO NewName;

สิ่งนี้ถูกนำไปใช้ก่อนที่มาตรฐาน SQL จะแก้ไขปัญหา - หากมีการระบุไว้ในมาตรฐาน SQL สำเนามาตรฐาน SQL 9075: 2003 ของฉันไม่ได้แสดงว่าเป็นมาตรฐาน (เหนือสิ่งอื่นใด RENAME ไม่ใช่หนึ่งในคีย์เวิร์ด) ฉันไม่รู้ว่ามันอยู่ใน SQL 9075: 2008 จริงหรือเปล่า


2
ไม่มี RENAME ใน SQL 2008 Draft ด้วย
Nicolas Buduroi

ไม่ใช่ AS - ใช้ TO RENAME COLUMN TableName.OldName TO NewName; www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/…
hitzi

6

ในเซิร์ฟเวอร์ sql คุณสามารถใช้ได้

exec sp_rename '<TableName.OldColumnName>','<NewColumnName>','COLUMN'

หรือ

sp_rename '<TableName.OldColumnName>','<NewColumnName>','COLUMN'


3

ALTER TABLE คือ SQL มาตรฐาน แต่ยังไม่ถูกนำไปใช้อย่างสมบูรณ์ในระบบฐานข้อมูลจำนวนมาก


ฉันยอมรับคำตอบของ bortz มากกว่าของคุณเพราะเขาให้คำอธิบายโดยละเอียด อย่างไรก็ตามฉันโหวตให้คุณ
MetroidFan2002

@ MetroidFan2002 - ฉันเพิ่มคำตอบเพื่อรับทราบว่า "ALTER TABLE" ไม่ใช่แค่ PostgreSQL แต่เป็นเรื่องธรรมดา
Paul Tomblin

2

มาตรฐานจะเป็นALTER TABLEแต่ไม่จำเป็นต้องได้รับการสนับสนุนจาก DBMS ทุกตัวที่คุณน่าจะพบดังนั้นหากคุณกำลังมองหาไวยากรณ์ที่ครอบคลุมทั้งหมดคุณอาจโชคไม่ดี


0

อีกทางเลือกหนึ่งคือ SQLคุณสามารถทำได้ใน Microsoft SQL Server Management Studio จาก Table Design Panel

วิธีแรก

ดับเบิลคลิกช้าที่คอลัมน์ ชื่อคอลัมน์จะกลายเป็นกล่องข้อความที่แก้ไขได้

วิธีที่สอง

SqlManagement Studio >> ฐานข้อมูล >> ตาราง >> specificTable >> Column Folder >> คลิกขวาที่คอลัมน์ >> Reman

วิธีที่สาม

ตาราง >> RightClick >> ออกแบบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.