Jak zmienić nazwę kolumny w tabeli bazy danych za pomocą języka SQL?

113

Jeśli chcę po prostu zmienić nazwę kolumny (nie zmieniać jej typu ani ograniczeń, tylko jej nazwę) w bazie danych SQL za pomocą SQL, jak mam to zrobić? Czy nie jest to możliwe?

To jest dla każdej bazy danych, która twierdzi, że obsługuje SQL. Po prostu szukam zapytania specyficznego dla SQL, które będzie działać niezależnie od rzeczywistej implementacji bazy danych.

MetroidFan2002
źródło
2
Oddelegowując skaffmana, to nie jest pytanie „SQL”, to (być może) pytanie „SQLServer”.
Tony Andrews
1
Dowolny system baz danych, który rzekomo używa języka SQL. Oracle, MySQL, etc ... Szukam odpowiedzi niezależnej od bazy danych.
MetroidFan2002

Odpowiedzi:

97

Na PostgreSQL (i wielu innych RDBMS) możesz to zrobić zwykłym ALTER TABLEpoleceniem:

=> 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
źródło
10
To nie jest obsługiwane w MySQL, prawda?
ustun
5
Nie, to nie jest obsługiwane w MySQL
rick
4
Nie jest to również obsługiwane w programie Microsoft SQL Server. Zamiast tego użyj sp_renamezgodnie z odpowiedzią Galwegiana: stackoverflow.com/a/174586/834431
Chris
Uważam, że MySQL 8.0 obsługuje teraz tę składnię
Dan,
118

W szczególności w przypadku programu SQL Server użyj sp_rename

USE AdventureWorks;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
Galwegian
źródło
Wydaje się, że jest specyficzny dla firmy Microsoft i nic w pierwotnym zapytaniu nie wskazywało na Microsoft DBMS.
bortzmeyer
1
Tak, odpowiedź, której szukałem, to „standardowy” SQL, niezależny od żadnej konkretnej implementacji. Jest to jednak dobra odpowiedź dla każdego, kto korzysta z systemu Microsoftu.
MetroidFan2002
35

W MySQL składnia jest następująca ALTER TABLE ... CHANGE:

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

Zauważ, że nie możesz po prostu zmienić nazwy i pozostawić typu i ograniczeń bez zmian; należy ponownie wpisać typ danych i ograniczenia po nowej nazwie kolumny.

jaspher chloe
źródło
jest testowany w bazie danych mySQL
jaspher chloe
2
Możemy po prostu zmienić nazwę kolumny bez wpływu na typ / ograniczenie RENAMEskładnią. Zmień nazwę kolumny w MySQL
Lukasz Szozda
21

Niestety, aby uzyskać rozwiązanie niezależne od bazy danych, musisz wiedzieć wszystko o kolumnie. Jeśli jest używany w innych tabelach jako klucz obcy, również będą musiały zostać zmodyfikowane.

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;

W najprostszych przypadkach (bez ograniczeń, wyzwalaczy, indeksów lub kluczy) zajmie powyższe 3 wiersze. W przypadku wszystkiego, co jest bardziej skomplikowane, podczas uzupełniania brakujących części może być bardzo bałagan.

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

Człowiek cień
źródło
Bezpośrednio odpowiada na pytanie, nawet jeśli nie jest to dokładnie to, czego szukał pytający ...
Lambart
W komentarzu OP rzeczywiście wyjaśnił, że właśnie tego szukał.
MagneTism
20

Myślę, że to najłatwiejszy sposób zmiany nazwy kolumny.

SP_RENAME 'TABLE_NAME.OLD_COLUMN_NAME','NEW_COLUMN_NAME'
Kunal Relan
źródło
to działało dla mnie na SQL Server. Nie jestem pewien, czy to działa na innych DBMS
Nic
9

W Informix możesz użyć:

RENAME COLUMN TableName.OldName TO NewName;

Zostało to wdrożone, zanim standard SQL rozwiązał ten problem - jeśli jest on rozwiązany w standardzie SQL. Moja kopia standardu SQL 9075: 2003 nie pokazuje, że jest to standard (między innymi RENAME nie jest jednym ze słów kluczowych). Nie wiem, czy faktycznie jest to w SQL 9075: 2008.

Jonathan Leffler
źródło
2
Brak RENAME w wersji roboczej SQL 2008.
Nicolas Buduroi
Not AS - użyj TO. RENAME COLUMN TableName.OldName TO NewName; www-01.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/ ...
hitzi
6

Na serwerze sql możesz użyć

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

lub

sp_rename '<TableName.OldColumnName>','<NewColumnName>','COLUMN'
Bimzee
źródło
6

Możesz użyć następującego polecenia, aby zmienić nazwę kolumny dowolnej tabeli w programie SQL Server:

exec sp_rename 'TableName.OldColumnName', 'New colunmName'
Prabhat Kumar Yadav
źródło
3

ALTER TABLE to standardowy SQL. Ale nie jest w pełni zaimplementowany w wielu systemach baz danych.

Paul Tomblin
źródło
Przyjąłem odpowiedź Bortza zamiast twojej, ponieważ podał szczegółowe wyjaśnienie. Niemniej jednak zagłosowałem za tobą.
MetroidFan2002
@ MetroidFan2002 - Dodałem swoją odpowiedź tylko po to, aby potwierdzić, że „ALTER TABLE” to nie tylko PostgreSQL, jest dość powszechne.
Paul Tomblin
2

Standard byłby taki ALTER TABLE, ale niekoniecznie jest to obsługiwane przez każdy DBMS, z którym prawdopodobnie się spotkasz, więc jeśli szukasz wszechstronnej składni, możesz mieć pecha.

Obrabować
źródło
0

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

Pierwszy sposób

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

Drugi sposób

SqlManagement Studio >> Bazy danych >> tabele >> specificTable >> Folder kolumn >> Kliknij prawym przyciskiem myszy kolumnę >> Reman

Trzecia droga

Tabela >> RightClick >> Projekt

Uzair Xlade
źródło