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.
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.
Odpowiedzi:
Posługiwać się sp_rename
EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'
Patrz: SERWER SQL - 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 w celu zawarcia wartości.
EXEC sp_RENAME '[TableName].[OldColumnName]', 'NewColumnName', 'COLUMN'
alter table
, że zakończy się niepowodzeniem, jeśli istnieją takie ograniczenia.
Alternatywnie SQL
możesz to zrobić w Microsoft SQL Server Management Studio. Oto kilka szybkich sposobów korzystania z GUI:
Powoli kliknij dwukrotnie kolumnę. Nazwa kolumny stanie się edytowalnym polem tekstowym.
Kliknij kolumnę prawym przyciskiem myszy i wybierz polecenie Zmień nazwę z menu kontekstowego.
Na przykład:
Ten sposób jest preferowany, gdy trzeba zmienić nazwę wielu kolumn za jednym razem.
Na przykład:
UWAGA: Wiem, że OP specjalnie poprosił o rozwiązanie SQL, pomyślałem, że może to pomóc innym :)
Powinieneś również określić schemat tabeli, w przeciwnym razie możesz otrzymać ten błąd:
Msg 15248, poziom 11, stan 1, procedura nazwa_sp, wiersz 238 Albo parametr @objname jest niejednoznaczny, albo deklarowany @objtype (COLUMN) jest niepoprawny.
Jeśli jest to skrypt wdrażania, poleciłbym również dodanie do niego dodatkowych zabezpieczeń.
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';
Dobrą propozycją byłoby użycie już wbudowanej funkcji, ale innym sposobem jest:
Zaletą korzystania z niego sp_rename
jest to, że dba on o wszystkie relacje z nim związane.
Z dokumentacji :
sp_rename automatycznie zmienia nazwę powiązanego indeksu za każdym razem, gdy zmienia się nazwa klucza PRIMARY KEY lub UNIQUE. Jeśli indeks o zmienionej nazwie jest powiązany z ograniczeniem PIERWOTNY KLUCZ, ograniczenie PIERWOTNY KLUCZ jest również automatycznie zmieniane przez sp_rename. sp_rename może być używany do zmiany nazw głównych i pomocniczych indeksów XML.
Możesz użyć sp_rename
do zmiany nazwy kolumny.
USE YourDatabase;
GO
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';
GO
Pierwszym parametrem jest obiekt do modyfikacji, drugi parametr to nowa nazwa, która zostanie podana do obiektu, a trzeci parametr KOLUMNA informuje serwer, że zmiana nazwy jest dla column
i może być również używany do zmiany nazwy tables
, index
a alias data type
.
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
może być w []
. To nie zadziała.NewColumnName
do []
, będzie to prowadzić do [[NewColumnName]]
.SQL Server Management Studio ma jakiś system zdefiniowanej procedury przechowywane (SP),
z których jeden jest stosowany w celu zmiany nazwy column.The SP procedury sp_rename
Składnia: nazwa_sp. „[Nazwa_tabeli]. Stara_nazwa_kolumny”, „nowa_nazwa_kolumny”
Aby uzyskać dalszą pomoc, zapoznaj się z tym artykułem: nazwa_spy przez Microsoft Docs
Uwaga: po wykonaniu tego SP serwer SQL wyświetli komunikat ostrzegawczy jako „ Uwaga: Zmiana dowolnej części nazwy obiektu może spowodować uszkodzenie skryptów i procedur przechowywanych ”. Jest to krytyczne tylko wtedy, gdy napisałeś własny SP, który obejmuje kolumnę w tabeli, którą zamierzasz zmienić.
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
Uruchom zapytanie:
SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'