SQLを使用してデータベーステーブルの列の名前を変更するにはどうすればよいですか?


113

SQLを使用してSQLデータベースで列の名前を変更するだけの場合(列のタイプや制約を変更せず、名前だけを変更する場合)、どうすればよいですか?それとも不可能ですか?

これは、SQLをサポートしていると主張するすべてのデータベースのためのものです。実際のデータベースの実装に関係なく機能するSQL固有のクエリを探しています。


2
これは「SQL」の質問ではなく、(おそらく)「SQLServer」の質問です。
Tony Andrews、

1
SQLの使用を目的とするデータベースシステム。Oracle、MySQLなど...データベースに依存しない答えを探しています。
MetroidFan2002 2008年

回答:


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、ガルベジアンの回答に従って使用してください: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 2008年

1
はい、私が探していた答えは「標準」SQLであり、特定の実装に依存していません。ただし、Microsoftのシステムを使用している人にとっては良い答えです。
MetroidFan2002 2008年

35

MySQLでは、構文はALTER TABLE ... CHANGE次のとおりです。

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

名前を変更して、タイプと制約をそのままにしておくことはできません。列の新しい名前の後にデータ型と制約を再入力する必要があります。


mySQLデータベースでテストされています
jaspher chloe

2
RENAME構文でタイプ/制約に影響を与えることなく、列の名前を変更できます。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行がかかります。より複雑なものについては、足りない部分を埋めるときに非常に面倒になる可能性があります。

ただし、前述のように、事前に変更する必要があるデータベースがわかっている場合は、より簡単なデータベース固有の方法があります。


質問者が探していたものとは正確に一致していなくても、質問に直接回答します...
ランバート

コメントの中で、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はキーワードの1つではありません)。実際にSQL 9075:2008にあるかどうかはわかりません。


2
SQL 2008 DraftにもRENAMEはありません。
Nicolas Buduroi、2009

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'

6

次のコマンドを使用して、SQL Serverの任意のテーブルの列の名前を変更できます。

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

3

ALTER TABLEは標準SQLです。しかし、それは多くのデータベースシステムに完全に実装されていません。


ボルツが詳細な説明をしてくれたので、ボルツの答えを受け入れた。それにもかかわらず、私はあなたを賛成した。
MetroidFan2002 2008年

@ MetroidFan2002-「ALTER TABLE」はPostgreSQLだけではなく、ごく一般的なものであることを認めるために私の回答を追加しました。
ポールトンブリン

2

標準はALTER TABLEですが、遭遇する可能性のあるすべてのDBMSで必ずしもサポートされているわけではないため、包括的な構文を探していると、運が悪い場合があります。


0

の代わりにSQL、テーブルデザインパネルからMicrosoft SQL Server Management Studioでこれを行うことができます。

最初の方法

列をゆっくりとダブルクリックします。列名が編集可能なテキストボックスになります。

二番目の方法

SqlManagement Studio >> DataBases >> tables >> specificTable >> Column Folder >> Right Click on column >> Reman

第三の方法

テーブル>> RightClick >>デザイン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.