2008-10-06 11 views
87

Jeśli chcę po prostu zmienić nazwę kolumny (nie zmieniać jej typu lub ograniczeń, tylko jej nazwę) w bazie danych SQL przy użyciu języka SQL, jak to zrobić? Czy to nie jest możliwe?Jak zmienić nazwę kolumny w tabeli bazy danych za pomocą SQL?

To jest dla każdej bazy danych twierdzącej, że obsługuje SQL, po prostu szukam zapytania specyficznego dla SQL, które zadziała, niezależnie od rzeczywistej implementacji bazy danych.

+1

Który system baz danych? – skaffman

+1

Drugi skaffman, to nie jest pytanie "SQL", to (być może) pytanie "SQLServer". –

+1

Dowolny system baz danych, który może korzystać z SQL. Oracle, MySQL, etc ... Szukam odpowiedzi niezależnej od bazy danych. – MetroidFan2002

Odpowiedz

78

na PostgreSQL (i wiele innych RDBMS), można zrobić to z regularnym ALTER TABLE stwierdzeniem:

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

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

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

To nie jest obsługiwane w MySQL, prawda? – ustun

+3

Nie, nie jest obsługiwany w MySQL – rick

+4

Nie jest to również obsługiwane w Microsoft SQL Server. Zamiast tego użyj 'sp_rename' zgodnie z odpowiedzią Galwegian: http://stackoverflow.com/a/174586/834431 – Chris

96

Specjalnie dla SQL Server, należy użyć sp_rename

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

Wydaje się, że jest to specyficzne dla Microsoft i nic w pierwotnym zapytaniu nie wskazywało na DBMS firmy Microsoft. – bortzmeyer

+1

Tak, odpowiedź, której szukałem, jest "standardowym" SQL i nie zależy od żadnej konkretnej implementacji. Jest to jednak dobra odpowiedź dla każdego, kto korzysta z systemu Microsoftu. – MetroidFan2002

+0

Edytowałem odpowiedź, aby wziąć to pod uwagę. –

3

ALTER TABLE jest standardem SQL. Ale nie jest całkowicie zaimplementowany w wielu systemach baz danych.

+0

Przyjąłem odpowiedź bortzową na twoją, ponieważ dał szczegółowe wyjaśnienie. Niemniej jednak przegłosowałem ciebie. – MetroidFan2002

+0

@ MetroidFan2002 - Dodałem tylko moją odpowiedź, aby potwierdzić, że "ALTER TABLE" to nie tylko PostgreSQL, to dość powszechne. –

9

W Informix, można użyć:

RENAME COLUMN TableName.OldName TO NewName; 

ten został wdrożony przed średnia SQL poruszono kwestię - jeśli jest ona skierowana w standardzie SQL. Moja kopia standardu SQL 9075: 2003 nie przedstawia go jako standardowego (między innymi RENAME nie jest jednym ze słów kluczowych). Nie wiem, czy faktycznie jest to w SQL 9075: 2008.

+2

Brak RENAME również w SQL 2008 Draft. –

+0

Not AS - użyj TO. 'RENAME COLUMN TableName.OldName DO newname;' http://www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/com.ibm.sqls.doc/ids_sqs_0939.htm – hitzi

+0

Dzięki - stałe ! –

2

Standardem będzie ALTER TABLE, ale to niekoniecznie jest obsługiwane przez każdy DBMS, który prawdopodobnie napotkasz, więc jeśli szukasz wszechstronnej składni, możesz mieć pecha.

14

Niestety, dla rozwiązania niezależnego od bazy danych, musisz wiedzieć wszystko o kolumnie. Jeśli jest używany w innych tabelach jako klucz obcy, będą one również wymagały modyfikacji.

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; 

Dla najprostszych przypadków (brak ograniczeń, wyzwalaczy, indeksów lub kluczy), zajmie on powyższe 3 wiersze. W przypadku czegokolwiek bardziej skomplikowanego może być bardzo brudny, gdy wypełniasz brakujące części.

Jednak, jak wspomniano powyżej, istnieją prostsze metody specyficzne dla bazy danych, jeśli wiesz, którą bazę danych należy zmodyfikować z wyprzedzeniem.

+0

Bezpośrednio odpowiada na pytanie, nawet jeśli nie jest to dokładnie to, czego szukał pytający ... – Lambart

-1

Alternatywnie do SQL, można to zrobić w Microsoft SQL Server Management Studio, z poziomu panelu Projekt tabeli.

Pierwsza droga

Powoli kliknij dwukrotnie kolumnę. Nazwa kolumny stanie się edytowalnym polem tekstowym.

Drugi sposób

SqlManagement Studio >> >> tabele baz danych >> specificTable >> Kolumna Folder >> Kliknij prawym przyciskiem myszy na kolumnie >> Reman

Third Way

Tabela >> RightClick >> Design

25

W MySQL, składnia jest ALTER TABLE ... CHANGE:

Należy pamiętać, że nie można zmienić nazwy i pozostawić bez zmian typ i ograniczenia; należy ponownie wpisać typ danych i ograniczenia po nowej nazwie kolumny.

+0

jest testowany w bazie danych mySQL –

15

Myślę, że to najprostszy sposób na zmianę nazwy kolumny.

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME' 
+0

to działało dla mnie na serwerze SQL. Nie jestem pewien, czy działa to na innych DBMS – Nic

4

W SQL Server można użyć

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

lub

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

Można użyć następującego polecenia, aby zmienić nazwę kolumny każdej tabeli w SQL Server:

exec sp_rename 'TableName.OldColumnName', 'New colunmName' 
Powiązane problemy