[sql] SQL을 사용하여 데이터베이스 테이블의 열 이름을 바꾸려면 어떻게합니까?

SQL을 사용하여 SQL 데이터베이스에서 열의 이름을 변경 (유형이나 제약 조건 만 변경하지 않고 이름 만 변경)하려면 어떻게해야합니까? 아니면 불가능합니까?

이것은 SQL을 지원한다고 주장하는 모든 데이터베이스를위한 것이며, 실제 데이터베이스 구현에 관계없이 작동하는 SQL 관련 쿼리를 찾고 있습니다.



답변

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


답변

특히 SQL Server의 경우 sp_rename

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


답변

MySQL에서 구문은 ALTER TABLE ... CHANGE다음과 같습니다.

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

이름을 바꾸고 유형과 제약 조건을 그대로 둘 수는 없습니다. 열의 새 이름 뒤에 데이터 유형과 제약 조건을 다시 입력해야합니다.


답변

불행히도 데이터베이스 독립 솔루션의 경우 열에 대한 모든 것을 알아야합니다. 다른 테이블에서 외래 키로 사용되는 경우에도 수정해야합니다.

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 줄을 사용합니다. 더 복잡한 것은 빠진 부분을 채울 때 매우 지저분해질 수 있습니다.

그러나 위에서 언급했듯이 미리 수정해야하는 데이터베이스를 알고있는 경우보다 간단한 데이터베이스 특정 방법이 있습니다.


답변

열 이름을 변경하는 가장 쉬운 방법이라고 생각합니다.

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'


답변

Informix에서는 다음을 사용할 수 있습니다.

RENAME COLUMN TableName.OldName TO NewName;

이것은 SQL 표준에서 문제를 해결하기 전에 구현되었습니다 (SQL 표준에서 해결 된 경우). SQL 9075 : 2003 표준의 사본은 표준으로 표시되지 않습니다 (다른 것들 중에서 RENAME은 키워드 중 하나가 아닙니다). 실제로 SQL 9075 : 2008인지 여부는 모르겠습니다.


답변

SQL Server에서는 다음을 사용할 수 있습니다.

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

또는

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