Ich verwende SQL Server 2008 und Navicat. Ich muss eine Spalte in einer Tabelle mit SQL umbenennen.
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
Diese Aussage funktioniert nicht.
Ich verwende SQL Server 2008 und Navicat. Ich muss eine Spalte in einer Tabelle mit SQL umbenennen.
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
Diese Aussage funktioniert nicht.
Antworten:
Verwenden sp_rename
EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'
Siehe: SQL SERVER - So benennen Sie einen Spalten- oder Tabellennamen um
Dokumentation: sp_rename (Transact-SQL)
Für Ihren Fall wäre es:
EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'
Denken Sie daran, einfache Anführungszeichen zu verwenden, um Ihre Werte einzuschließen.
EXEC sp_RENAME '[TableName].[OldColumnName]', 'NewColumnName', 'COLUMN'
alter table
die fehlschlägt, wenn solche Einschränkungen bestehen.
Alternativ dazu SQL
können Sie dies in Microsoft SQL Server Management Studio tun. Hier sind einige schnelle Möglichkeiten, die GUI zu verwenden:
Doppelklicken Sie langsam auf die Spalte. Der Spaltenname wird zu einem bearbeitbaren Textfeld.
Klicken Sie mit der rechten Maustaste auf die Spalte und wählen Sie im Kontextmenü die Option Umbenennen.
Zum Beispiel:
Diese Methode ist vorzuziehen, wenn Sie mehrere Spalten gleichzeitig umbenennen müssen.
Zum Beispiel:
HINWEIS: Ich weiß, dass OP speziell nach einer SQL-Lösung gefragt hat, dachte, dies könnte anderen helfen :)
Sie sollten auch das Schema der Tabelle angeben, da sonst der folgende Fehler angezeigt wird:
Nachricht 15248, Ebene 11, Status 1, Prozedur sp_rename, Zeile 238 Entweder ist der Parameter @objname mehrdeutig oder der beanspruchte @objtype (COLUMN) ist falsch.
Wenn es sich um ein Bereitstellungsskript handelt, würde ich auch empfehlen, zusätzliche Sicherheit hinzuzufügen.
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';
Es wäre ein guter Vorschlag, eine bereits integrierte Funktion zu verwenden, aber ein anderer Weg ist:
Der Vorteil hinter der Verwendung von sp_rename
ist, dass es sich um alle damit verbundenen Beziehungen kümmert.
Aus der Dokumentation :
sp_rename benennt den zugehörigen Index automatisch um, wenn eine PRIMARY KEY- oder UNIQUE-Einschränkung umbenannt wird. Wenn ein umbenannter Index an eine PRIMARY KEY-Einschränkung gebunden ist, wird die PRIMARY KEY-Einschränkung auch automatisch durch sp_rename umbenannt. Mit sp_rename können primäre und sekundäre XML-Indizes umbenannt werden.
Sie können sp_rename
eine Spalte umbenennen.
USE YourDatabase;
GO
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';
GO
Der erste Parameter ist das Objekt modifiziert werden, ist der zweite Parameter der neue Name, der auf das Objekt gegeben wird, und der dritte Parameter COLUMN informiert der Server , dass der Umbenennungs für das ist column
, und auch verwendet werden können , umbenennen tables
, index
und alias data type
.
Da ich oft hierher komme und mich dann frage, wie ich die Klammern verwenden soll, kann diese Antwort für Leute wie mich nützlich sein.
EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN';
OldColumnName
darf nicht drin sein []
. Es wird nicht funktionieren.NewColumnName
in []
, wird es führen in [[NewColumnName]]
.In SQL Server Management Studio sind einige systemdefinierte gespeicherte Prozeduren (SP) vorhanden.
Eine davon wird zum Umbenennen einer Spalte verwendet. Der SP ist sp_rename
Syntax: sp_rename '[Tabellenname] .old_column_name', 'new_column_name'
Weitere Hilfe finden Sie in diesem Artikel: sp_rename von Microsoft Docs
Hinweis: Bei der Ausführung dieses SP gibt der SQL Server eine Warnmeldung aus : " Achtung: Das Ändern eines Teils eines Objektnamens kann Skripte und gespeicherte Prozeduren beschädigen." Dies ist nur wichtig, wenn Sie Ihren eigenen SP geschrieben haben, der die Spalte betrifft in der Tabelle werden Sie ändern.
Verbesserte Version von @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
Abfrage ausführen:
SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'