Bagaimana cara mengganti nama kolom di tabel database menggunakan SQL?

113

Jika saya hanya ingin mengganti nama kolom (tidak mengubah jenis atau batasannya, hanya namanya) dalam database SQL menggunakan SQL, bagaimana cara melakukannya? Atau tidak mungkin?

Ini untuk database apa pun yang mengklaim mendukung SQL, saya hanya mencari kueri khusus SQL yang akan berfungsi terlepas dari implementasi database yang sebenarnya.

MetroidFan2002
sumber
2
Mendekati skaffman, ini bukan pertanyaan "SQL", ini (mungkin) pertanyaan "SQLServer".
Tony Andrews
1
Sistem database apa pun yang bermaksud menggunakan SQL. Oracle, MySQL, dll ... Saya sedang mencari jawaban yang tidak bergantung pada database.
MetroidFan2002

Jawaban:

97

Di PostgreSQL (dan banyak RDBMS lainnya), Anda dapat melakukannya dengan ALTER TABLEpernyataan biasa :

=> 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
bortzmeyer.dll
sumber
10
Ini tidak didukung di MySQL, bukan?
ustun
5
Tidak, ini tidak didukung di MySQL
rick
4
Ini juga tidak didukung di Microsoft SQL Server. Alih-alih, gunakan sp_renamesesuai jawaban Galwegian: stackoverflow.com/a/174586/834431
Chris
Saya percaya MySQL 8.0 mendukung sintaks ini sekarang
Dan
118

Khusus untuk SQL Server, gunakan sp_rename

USE AdventureWorks;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
Galwegian
sumber
Tampaknya khusus Microsoft dan tidak ada dalam kueri asli yang menunjukkan DBMS Microsoft.
bortzmeyer
1
Ya, jawaban yang saya cari adalah SQL "standar", dan tidak bergantung pada implementasi tertentu. Namun, ini adalah jawaban yang bagus untuk siapa saja yang menggunakan sistem Microsoft.
MetroidFan2002
35

Di MySQL, sintaksnya adalah ALTER TABLE ... CHANGE:

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

Perhatikan bahwa Anda tidak bisa begitu saja mengganti nama dan membiarkan tipe dan batasan apa adanya; Anda harus mengetik ulang tipe data dan batasan setelah nama kolom baru.

jaspher chloe
sumber
itu diuji dalam database mySQL
jaspher chloe
2
Kami hanya dapat mengganti nama kolom tanpa mempengaruhi tipe / batasan dengan RENAMEsintaks. Ubah nama kolom di MySQL
Lukasz Szozda
21

Sayangnya, untuk solusi database independen, Anda perlu mengetahui segalanya tentang kolom. Jika digunakan di tabel lain sebagai kunci asing, mereka juga perlu dimodifikasi.

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;

Untuk kasus yang paling sederhana (tanpa batasan, pemicu, indeks atau kunci), ini akan mengambil 3 baris di atas. Untuk hal yang lebih rumit, ini bisa menjadi sangat berantakan saat Anda mengisi bagian yang hilang.

Namun, seperti yang disebutkan di atas, ada metode khusus database yang lebih sederhana jika Anda mengetahui database mana yang perlu diubah sebelumnya.

Manusia bayangan
sumber
Langsung menjawab pertanyaan, meskipun bukan itu yang dicari penanya ...
Lambart
Dalam komentarnya, OP justru mengklarifikasi bahwa memang itulah yang ia cari.
MagneTism
20

Saya rasa ini adalah cara termudah untuk mengubah nama kolom.

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'
Kunal Relan
sumber
ini berhasil untuk saya di SQL Server. Saya tidak yakin apakah ini berfungsi pada DBMS lain
Nic
9

Di Informix, Anda dapat menggunakan:

RENAME COLUMN TableName.OldName TO NewName;

Ini diterapkan sebelum standar SQL mengatasi masalah - jika ditangani dalam standar SQL. Salinan saya atas standar SQL 9075: 2003 tidak menunjukkannya sebagai standar (antara lain, RENAME bukan salah satu kata kunci). Saya tidak tahu apakah itu sebenarnya dalam SQL 9075: 2008.

Jonathan Leffler
sumber
2
Tidak ada RENAME di SQL 2008 Draft juga.
Nicolas Buduroi
Bukan SEBAGAI - gunakan TO. RENAME COLUMN TableName.OldName TO NewName; www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/…
hitzi
6

Di sql server Anda dapat menggunakan

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

atau

sp_rename '<TableName.OldColumnName>','<NewColumnName>','COLUMN'
Bimzee
sumber
6

Anda dapat menggunakan perintah berikut untuk mengganti nama kolom dari tabel mana pun di SQL Server:

exec sp_rename 'TableName.OldColumnName', 'New colunmName'
Prabhat Kumar Yadav
sumber
3

ALTER TABLE adalah SQL standar. Tapi itu tidak sepenuhnya diterapkan di banyak sistem database.

Paul Tomblin
sumber
Saya menerima jawaban bortz atas Anda karena dia memberikan penjelasan rinci. Namun demikian, saya memuji Anda.
MetroidFan2002
@ MetroidFan2002 - Saya hanya menambahkan jawaban saya untuk mengakui bahwa "ALTER TABLE" bukan hanya PostgreSQL, itu sangat umum.
Paul Tomblin
2

Standar akan ALTER TABLE, tetapi itu tidak selalu didukung oleh setiap DBMS yang mungkin Anda temui, jadi jika Anda mencari sintaks yang mencakup semua, Anda mungkin kurang beruntung.

rampok
sumber
0

Alternatifnya SQL, Anda dapat melakukan ini di Microsoft SQL Server Management Studio, dari Panel Desain tabel.

Cara Pertama

Klik dua kali secara perlahan pada kolom tersebut. Nama kolom akan menjadi kotak teks yang dapat diedit.

Cara Kedua

SqlManagement Studio >> DataBases >> tables >> specificTable >> Column Folder >> Klik kanan pada kolom >> Reman

Cara Ketiga

Tabel >> Klik Kanan >> Desain

Uzair Xlade
sumber