Benennen Sie die Spalte SQL Server 2008 um

652

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.

Serhio g. Lazin
quelle
5
Beachten Sie, dass dies kein Duplikat der Frage Nr. 174582 ist, die verknüpft ist: Diese ist MS SQL-spezifisch, diese ist datenbankunabhängig.

Antworten:

1193

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.

Habib
quelle
24
Beachten Sie, dass Sie den NewColumnName nicht in Klammern setzen sollten, da SQL Server dann [[[NewColumnName]]] als Namen der neuen Spalte verwendet. Außerdem sollte sp_rename EXEC oder EXECUTE vorangestellt werden.
Mark Freeman
29
Sie dürfen und sollten Klammern in den ersten Parameter setzen, um die Spalte zu identifizieren, aber nicht in den zweiten Parameter. So:EXEC sp_RENAME '[TableName].[OldColumnName]', 'NewColumnName', 'COLUMN'
Niels Brinch
2
Sie sollten in Ihrer Antwort beachten Sie, dass diese gespeicherte Prozedur Griffe Standardwerte, null etc contraints während der Umbenennungs tun, als auf eine Ebene entgegengesetzt , alter tabledie fehlschlägt, wenn solche Einschränkungen bestehen.
Tuncay Göncüoğlu
4
Beachten Sie, dass wenn Sie 'table_name.new_name' verwenden, es zu [schema]. [Table_name]. [Table_name.new_name] wird - setzen Sie diesen Tabellennamen also nicht in den neuen Namen! (Es ist richtig in dieser Antwort, nur eine Notiz für Blicke hinzufügen)
Mark Schultheiss
1
Wenn die Datenbank ein Schema enthält, müssen Sie den Schemanamen vor den Tabellennamen setzen: EXEC sp_RENAME 'schemaname.tabellenname.old_name', 'neuer_name', 'SPALTE'
am
105

Alternativ dazu SQLkönnen Sie dies in Microsoft SQL Server Management Studio tun. Hier sind einige schnelle Möglichkeiten, die GUI zu verwenden:

Erster Weg

Doppelklicken Sie langsam auf die Spalte. Der Spaltenname wird zu einem bearbeitbaren Textfeld.


Zweiter Weg

Klicken Sie mit der rechten Maustaste auf die Spalte und wählen Sie im Kontextmenü die Option Umbenennen.

Zum Beispiel:

Spaltennamen umbenennen


Dritter Weg

Diese Methode ist vorzuziehen, wenn Sie mehrere Spalten gleichzeitig umbenennen müssen.

  1. Klicken Sie mit der rechten Maustaste auf die Tabelle, die die Spalte enthält, die umbenannt werden muss.
  2. Klicken Sie auf Design .
  3. Klicken und bearbeiten Sie im Tabellenentwurfsfenster das Textfeld des Spaltennamens, den Sie ändern möchten.

Zum Beispiel: Beispiel für das Design von MSSMS-Tabellen

HINWEIS: Ich weiß, dass OP speziell nach einer SQL-Lösung gefragt hat, dachte, dies könnte anderen helfen :)

Carrie Kendall
quelle
1
Oder der Benutzer hat nicht die Berechtigungen.
Carrie Kendall
6
Mach das niemals. Sie kopieren die Tabelle, löschen die alte und benennen sie um. Verwenden Sie NIEMALS die GUI, um etwas an einer Tabelle zu ändern.
HLGEM
6
@HLGEM das ist eine ziemlich große pauschale Aussage. Können Sie auf jeden Fall Ressourcen für das bereitstellen, was Sie erklärt haben? dh den Tisch fallen lassen usw.
Carrie Kendall
2
@CarrieKendall, schreiben Sie die Änderung über die GUI aus, anstatt sie vorzunehmen, und Sie werden sehen. Aus diesem Grund ist es viel langsamer, Änderungen über die GUI an einer großen Tabelle vorzunehmen, als über sp_rename oder alter table. Darüber hinaus sind Änderungen an der Datenbankstruktur Codeänderungen und sollten wie anderer Code in der Quellcodeverwaltung erfolgen, also in einem Skript. Dies ist besonders wichtig, wenn Sie nicht zulassen, dass Entwicklerproduktionsdatenbankrechte Tabellen ändern, da Sie das Skript in jedem Fall benötigen. Und Sie möchten keine Tabellen mit Millionen von Datensätzen auf dem Produkt kopieren, löschen und neu erstellen.
HLGEM
18
Ich habe gerade eine SQL Server 2012-Tabelle mit Management Studio mit laufendem Profiler umbenannt und sp_rename verwendet. Ich kann jedoch nicht für frühere Versionen sprechen.
Steve Dowling
58

Versuchen:

EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN'
TechDo
quelle
27

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';
Taher
quelle
Ich mag diesen sicheren Ansatz, der sich gut zum Schreiben von Migrationen eignet, die möglicherweise in verschiedenen Umgebungen ausgeführt werden.
Adil H. Raza
Wie bei der Existenzprüfung fühle ich mich in Ordnung, wenn ich als Teil einer Reihe anderer Skripte erneut ausgeführt werde
unbekannt,
19

Es wäre ein guter Vorschlag, eine bereits integrierte Funktion zu verwenden, aber ein anderer Weg ist:

  1. Erstellen Sie eine neue Spalte mit demselben Datentyp und NEUEM NAMEN.
  2. Führen Sie eine UPDATE / INSERT-Anweisung aus, um alle Daten in eine neue Spalte zu kopieren.
  3. Lass die alte Spalte fallen.

Der Vorteil hinter der Verwendung von sp_renameist, 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.

NeverHopeless
quelle
* In Schritt 1 muss NULL in neuer Spalte erlaubt sein. * Optional den 4. Schritt hinzufügen, um eine neue Spalte zu ändern, damit keine NULL-Werte zugelassen werden
BitLauncher
16

Sie können sp_renameeine 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, indexund alias data type.

Alexandre Neukirchen
quelle
2
Verstehe nicht, warum du eine neue Antwort hinzufügst, auch wenn 4 von 5 über sp_rename sprechen ...?
Pawel Czapski
3
Irgendwann würde hier jemand die Funktionsweise des Parameters erklären müssen, niemand tat dies
Alexandre Neukirchen
1
Ja, eigentlich hast du recht, für mich ist es so offensichtlich, aber für neue Jungs vielleicht nicht.
Pawel Czapski
12

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'; 
  • Das OldColumnNamedarf nicht drin sein []. Es wird nicht funktionieren.
  • Legen Sie nicht NewColumnNamein [], wird es führen in [[NewColumnName]].
HonzaB
quelle
3

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.

Tahir77667
quelle
2

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
Rikin Patel
quelle
0

Oder Sie können einfach zweimal langsam auf die Spalte in SQL Management Studio klicken und sie über die Benutzeroberfläche umbenennen ...

Dave Cole
quelle
-1

Abfrage ausführen:

    SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'
Purnima Bhatia
quelle
Bitte wiederholen Sie langjährige und bestehende Antworten nicht mit vielen Stimmen.
TT.