SQL kullanarak bir veritabanı tablosundaki bir sütunu nasıl yeniden adlandırırım?


113

SQL kullanarak bir SQL veritabanında bir sütunu yeniden adlandırmak istersem (türünü veya kısıtlamalarını değiştirmek değil, sadece adını), bunu nasıl yapabilirim? Yoksa mümkün değil mi?

Bu, SQL'i desteklediğini iddia eden herhangi bir veritabanı içindir, ben sadece gerçek veritabanı uygulamasından bağımsız olarak çalışacak SQL'e özgü bir sorgu arıyorum.


2
Skaffman ikinci olarak, bu bir "SQL" sorusu değil, (belki) bir "SQLSunucusu" sorusudur.
Tony Andrews

1
SQL kullanmak isteyen herhangi bir veritabanı sistemi. Oracle, MySQL, vs ... Veritabanından bağımsız bir cevap arıyorum.
MetroidFan2002

Yanıtlar:


97

PostgreSQL'de (ve diğer birçok RDBMS'de) bunu normal bir ALTER TABLEifade ile yapabilirsiniz :

=> 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
Bu MySQL'de desteklenmiyor, değil mi?
ustun

5
Hayır,
MySQL'de

4
Bu, Microsoft SQL Server'da da desteklenmez. Bunun yerine sp_renameGalwegian'ın cevabına göre kullanın: stackoverflow.com/a/174586/834431
Chris

MySQL 8.0'ın şu anda bu sözdizimini desteklediğine inanıyorum
Dan

118

Özellikle SQL Server için kullanın sp_rename

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

Microsoft'a özgü görünüyor ve orijinal sorgudaki hiçbir şey bir Microsoft DBMS'yi göstermiyor.
bortzmeyer

1
Evet, aradığım cevap "standart" SQL ve herhangi bir uygulamaya bağlı değil. Ancak, Microsoft'un sistemini kullanan herkes için iyi bir cevaptır.
MetroidFan2002

35

MySQL'de sözdizimi şöyledir ALTER TABLE ... CHANGE:

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

Türü ve kısıtlamaları olduğu gibi yeniden adlandırıp bırakamayacağınızı unutmayın; sütunun yeni adından sonra veri türünü ve kısıtlamaları yeniden yazmanız gerekir.


mySQL veritabanında test edildi
jaspher chloe

2
RENAMESözdizimi ile tür / kısıtlamayı etkilemeden sütunu yeniden adlandırabiliriz .
MySQL'de

21

Ne yazık ki, veri tabanından bağımsız bir çözüm için, sütun hakkında her şeyi bilmeniz gerekecek. Diğer tablolarda yabancı anahtar olarak kullanılıyorsa, bunların da değiştirilmesi gerekecektir.

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;

En basit durumlar için (kısıtlama, tetikleyici, dizin veya anahtar yok), yukarıdaki 3 satırı alacaktır. Daha karmaşık bir şey için, eksik parçaları doldurdukça çok karışık olabilir.

Ancak, yukarıda belirtildiği gibi, hangi veritabanını önceden değiştirmeniz gerektiğini biliyorsanız, veritabanına özgü daha basit yöntemler vardır.


Soruyu soran kişi tam olarak aradığı şey bu olmasa bile soruyu doğrudan yanıtlıyor ...
Lambart

OP yorumunda aslında tam da aradığı şeyin bu olduğunu açıkladı.
MagneTism

20

Bence bu sütun adını değiştirmenin en kolay yolu.

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'

bu benim için SQL Server'da çalıştı. Bunun diğer DBMS'de çalışıp çalışmadığından emin değilim
Nic

9

Informix'te şunları kullanabilirsiniz:

RENAME COLUMN TableName.OldName TO NewName;

Bu, SQL standardı sorunu ele almadan önce uygulandı - eğer SQL standardında ele alınmışsa. Benim SQL 9075: 2003 standardı kopyam onu ​​standart olarak göstermiyor (diğer şeylerin yanı sıra, RENAME anahtar kelimelerden biri değil). Aslında SQL 9075: 2008'de olup olmadığını bilmiyorum.


2
SQL 2008 Taslağında da RENAME yok.
Nicolas Buduroi

AS değil - TO kullanın. RENAME COLUMN TableName.OldName TO NewName; www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/…
hitzi

6

Sql sunucusunda kullanabilirsiniz

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

veya

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

6

SQL Server'daki herhangi bir tablonun sütununu yeniden adlandırmak için aşağıdaki komutu kullanabilirsiniz:

exec sp_rename 'TableName.OldColumnName', 'New colunmName'

3

ALTER TABLE standart SQL'dir. Ancak birçok veritabanı sisteminde tam olarak uygulanmamaktadır.


Bortz'un cevabını detaylı bir açıklama yaptığı için kabul ettim. Yine de sana oy verdim.
MetroidFan2002

@ MetroidFan2002 - Cevabımı yalnızca "ALTER TABLE" ın sadece PostgreSQL olmadığını, oldukça yaygın olduğunu kabul etmek için ekledim.
Paul Tomblin

2

Standart olacaktır ALTER TABLE, ancak bu karşılaşabileceğiniz her DBMS tarafından mutlaka desteklenmeyebilir, bu nedenle her şeyi kapsayan bir sözdizimi arıyorsanız, şansınız kalmayabilir.


0

Alternatif olarak SQL, bunu Tasarım Paneli tablosundan Microsoft SQL Server Management Studio'da yapabilirsiniz.

İlk yol

Sütuna yavaşça çift tıklayın. Sütun adı, düzenlenebilir bir metin kutusu olacaktır.

İkinci Yol

SqlManagement Studio >> DataBases >> tablolar >> specificTable >> Sütun Klasörü >> Sütuna sağ tıklayın >> Kal

Üçüncü Yol

Tablo >> RightClick >> Tasarım

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.