Zmień nazwę kolumny SQL Server 2008

Używam SQL Server 2008 i Navicat. Muszę zmienić nazwę kolumny w tabeli za pomocą SQL.

ALTER TABLE table_name RENAME COLUMN old_name to new_name;

To stwierdzenie nie działa.

Author: Luke Girvin, 2013-04-30

12 answers

Użyj sp_rename

EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'

Patrz: SQL SERVER - Jak zmienić nazwę kolumny lub nazwy tabeli

Dokumentacja: sp_rename (Transact-SQL)

W Twoim przypadku byłoby to:

EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'

Pamiętaj, aby używać pojedynczych cudzysłowów do załączania wartości.

 1258
Author: Habib,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-29 06:57:17

Alternatywnie do SQL, można to zrobić w Microsoft SQL Server Management Studio. Oto kilka szybkich sposobów korzystania z GUI:

First Way

Powolne podwójne kliknięcie na kolumnie. Nazwa kolumny stanie się edytowalnym polem tekstowym.


Second Way

Kliknij prawym przyciskiem myszy na kolumnie i wybierz Zmień nazwę z menu kontekstowego.

Na przykład:

Aby zmienić nazwę kolumny


Third Way

ten sposób jest korzystniejszy, gdy trzeba zmienić nazwę wielu kolumn w raz.

  1. kliknij prawym przyciskiem myszy tabelę zawierającą kolumnę, która wymaga zmiany nazwy.
  2. Kliknij Projekt .
  3. w panelu Projekt tabeli Kliknij i edytuj pole tekstowe nazwy kolumny, którą chcesz zmienić.

Na przykład: Przykład projektu tabeli MSSMS

Uwaga: wiem, że OP specjalnie poprosił o rozwiązanie SQL, myślałem, że może to pomóc innym :)

 114
Author: Carrie Kendall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Try:

EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN'
 60
Author: TechDo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-30 09:39:08

Należy również podać schemat tabeli, w przeciwnym razie może pojawić się błąd:

Msg 15248, Level 11, State 1, Procedure sp_rename, Line 238 parametr @objname jest niejednoznaczny lub deklarowana @ objtype (kolumna) jest źle.

Jeśli jest to skrypt wdrożeniowy, polecam dodać do niego dodatkowe zabezpieczenia.

IF EXISTS (
        SELECT 1
        FROM sys.columns
        WHERE
            name = 'OldColumnName' AND
            object_name(object_id) = 'TableName'
    ) AND
    NOT EXISTS (
        SELECT 1
        FROM sys.columns
        WHERE
            name = 'NewColumnName' AND
            object_name(object_id) = 'TableName'
    )
    EXEC sp_RENAME 'SchemaName.TableName.OldColumnName', 'NewColumnName', 'COLUMN';
 30
Author: Taher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-28 03:06:40

Dobrym pomysłem byłoby użycie już wbudowanej funkcji, ale innym sposobem jest:

  1. Utwórz nową kolumnę o tym samym typie danych i nowej nazwie.
  2. Uruchom instrukcję UPDATE/INSERT, aby skopiować wszystkie dane do nowej kolumny.
  3. Rzuć starą kolumnę.

Zaletą korzystania z sp_rename jest to, że dba o wszystkie relacje z nim związane.

Z dokumentacji :

Sp_rename zmienia nazwę powiązanego indeksu za każdym razem, gdy zmieniono nazwę klucza głównego lub ograniczenia unikalnego. Jeśli zmieniony indeks jest powiązany z ograniczeniem klucza głównego, to ograniczenie klucza głównego jest również automatycznie zmieniane przez sp_rename. sp_rename może być użyte do zmiany nazw podstawowych i drugorzędnych indeksów XML.

 20
Author: NeverHopeless,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-30 11:27:37

Możesz użyć sp_rename aby zmienić nazwę kolumny.

USE YourDatabase;  
GO  
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';  
GO  

Pierwszy parametr to obiekt do modyfikacji, drugi parametr to nowa nazwa, która zostanie nadana obiektowi, a trzeci parametr kolumna informuje serwer, że zmiana nazwy jest dla column i może być również użyty do zmiany nazwy tables, index i alias data type.

 17
Author: Alexandre Neukirchen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-20 13:22:27

Ponieważ często tu przychodzę i zastanawiam się, jak używać nawiasów, ta odpowiedź może być przydatna dla takich jak ja.

EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN'; 
  • OldColumnName nie może być w []. To nie zadziała.
  • nie umieszczaj NewColumnName w [], to spowoduje [[NewColumnName]].
 15
Author: HonzaB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-25 07:00:10

SQL Server management studio posiada pewne systemowe zdefiniowane procedury składowane (SP)
Jeden z nich służy do zmiany nazwy kolumny.SP to sp_rename

składnia: sp_rename " [table_name].old_column_name', 'new_column_name'
Aby uzyskać dalszą pomoc, zapoznaj się z tym artykułem: sp_rename by Microsoft Docs

Uwaga: podczas wykonywania tego SP serwer sql wyświetli komunikat ostrzegawczy jako ' Uwaga: Zmiana dowolnej części obiektu name could break scripts and stored procedures'.Jest to krytyczne tylko wtedy, gdy napisałeś własne sp, które obejmuje kolumnę w tabeli, którą zamierzasz zmienić.

 4
Author: Tahir77667,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-08 13:28:41

Ulepszona wersja @ Taher

DECLARE @SchemaName AS VARCHAR(128)
DECLARE @TableName AS VARCHAR(128)
DECLARE @OldColumnName AS VARCHAR(128)
DECLARE @NewColumnName AS VARCHAR(128)
DECLARE @ParamValue AS VARCHAR(1000)

SET @SchemaName = 'dbo'
SET @TableName = 'tableName'
SET @OldColumnName = 'OldColumnName'
SET @NewColumnName = 'NewColumnName'
SET @ParamValue = @SchemaName + '.' + @TableName + '.' + @OldColumnName

IF EXISTS
(
    SELECT 1 FROM sys.columns WHERE name = @OldColumnName AND OBJECT_NAME(object_id) = @TableName
)
AND NOT EXISTS
(
    SELECT 1 FROM sys.columns WHERE name = @NewColumnName AND OBJECT_NAME(object_id) = @TableName
)
BEGIN
    EXEC sp_rename @ParamValue, @NewColumnName, 'COLUMN';
END
 3
Author: Rikin Patel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-10 07:35:14

W moim przypadku używałem MySQL WorkBench i

ALTER TABLE table_name RENAME COLUMN old_name new_name varchar(50) not null; 
// without TO and specify data type of that column 

Wystarczyło zmienić nazwę kolumny!

 1
Author: Rustamjon Kirgizbaev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-22 16:06:17

LUB możesz po prostu powoli kliknąć dwukrotnie kolumnę w SQL Management Studio I zmienić jej nazwę za pomocą interfejsu użytkownika...

 0
Author: Dave Cole,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-13 18:10:51

Uruchom Zapytanie:

    SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'
 0
Author: Purnima Bhatia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-31 05:47:15