Wie benenne ich eine Tabelle in SQL Server um?


370

Die SQLAbfrage, die ich verwendet habe, ist:

ALTER TABLE oldtable RENAME TO newtable;

Aber es gibt mir einen Fehler.

Server: Nachricht 156, Ebene 15, Status 1, Zeile 1
Falsche Syntax in der Nähe des Schlüsselworts 'TO'.

Antworten:


683

Verwenden Sie den folgenden sp_renameBefehl, um eine Tabelle in SQL Server umzubenennen :

exec sp_rename 'schema.old_table_name', 'new_table_name'

7
Eine weitere Sache: Wenn einer der Tabellennamen einen enthält ., verwenden Sie []den Tabellennamen. (Ich weiß, ich weiß, aber Punkte können passieren ...) ZB sp_rename '[Stupid.name]', 'NewName'oder mit Schemasp_rename '[dbo.Stupid.name]', 'NewName'
Vacip

55
Fügen Sie das Schema nicht versehentlich in das 'NewName'Feld ein, da Ihre Tabelle sonst möglicherweise so aussieht dbo.dbo.NewName.
Michael Plautz

4
Beachten Sie, dass Sie beim Umbenennen einer Tabelle mit ziemlicher Sicherheit auch Verweise auf diese Tabelle umbenennen möchten, die möglicherweise in gespeicherten Prozeduren, Ansichten, Funktionen usw. vorhanden sind. Eine schnelle Google-Suche kann eines der vielen Tools finden, die dies für Sie tun können . Oder Sie können ein Skript verwenden, das eine bestimmte Zeichenfolge in all diesen Objekten findet, sie als ALTER-Anweisungen einfügen, suchen und ersetzen und dann alle ausführen.
MGOwen

2
Sie können auch ein Synonym erstellen, das nach dem alten Tabellennamen benannt ist, der auf die neue Tabelle verweistCREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
Ruskin

Setzen Sie keinen neuen Namen in eckige Klammern! Andernfalls hat die Tabelle eckige Klammern im Namen. Also: 'new_table_name' - ist richtig, '[new_table_name]' - bringt Sie in Schwierigkeiten
VeganHunter

143

So benennen Sie eine Spalte um:

sp_rename 'table_name.old_column_name', 'new_column_name' , 'COLUMN';

So benennen Sie eine Tabelle um:

sp_rename 'old_table_name','new_table_name';

Erklärt nicht, wie mit anderen Schemas als dem Standard-Dbo umgegangen werden soll.
Sal

1
@Sal Nicht weniger als jede andere Antwort hier? Haben Sie nach einer Möglichkeit gesucht, das Schema einer Tabelle zu ändern ?
Bacon Bits

14

Wenn Sie sp_rename verwenden, das wie in den obigen Antworten funktioniert, überprüfen Sie auch, welche Objekte nach dem Umbenennen betroffen sind und auf diese Tabelle verweisen, da Sie diese ebenfalls ändern müssen

Ich habe hier in Pinal Daves Blog ein Codebeispiel für Tabellenabhängigkeiten genommen

USE AdventureWorks
GO
SELECT
referencing_schema_name = SCHEMA_NAME(o.SCHEMA_ID),
referencing_object_name = o.name,
referencing_object_type_desc = o.type_desc,
referenced_schema_name,
referenced_object_name = referenced_entity_name,
referenced_object_type_desc = o1.type_desc,
referenced_server_name, referenced_database_name
--,sed.* -- Uncomment for all the columns
FROM
sys.sql_expression_dependencies sed
INNER JOIN
sys.objects o ON sed.referencing_id = o.[object_id]
LEFT OUTER JOIN
sys.objects o1 ON sed.referenced_id = o1.[object_id]
WHERE
referenced_entity_name = 'Customer'

Daher müssen auch alle diese abhängigen Objekte aktualisiert werden

Oder verwenden Sie ein Add-In, wenn Sie können. Einige von ihnen verfügen über Funktionen zum Umbenennen von Objekten, und alle hängen auch von Objekten ab


11

Wenn Sie versuchen, exec sp_renameeinen LockMatchID-Fehler zu erhalten, kann es hilfreich sein, zuerst eine use [database] -Anweisung hinzuzufügen:

Ich habe es versucht

 exec sp_rename '[database_name].[dbo].[table_name]', 'new_table_name';
 -- Invalid EXECUTE statement using object "Object", method "LockMatchID".

Was ich tun musste, um das Problem zu beheben, war, es umzuschreiben auf:

use database_name
exec sp_rename '[dbo].[table_name]', 'new_table_name';

10

Tabellenname

sp_rename 'db_name.old_table_name', 'new_table_name'

Säule

sp_rename 'db_name.old_table_name.name' 'userName', 'COLUMN'

Index

sp_rename 'db_name.old_table_name.id', 'product_ID', 'INDEX'

auch für statik und datentypen verfügbar


2
Für die Spalte fehlt ein Komma zwischen dem ersten und dem zweiten Parameter. Es sollte sein: sp_rename 'db_name.old_table_name.name', 'userName', 'COLUMN'
sebastian.roibu


0

Von dem hier vorgeschlagenen hat nichts funktioniert. Also haben Sie die Daten einfach in eine neue Tabelle eingefügt

SELECT * 
INTO [acecodetable].['PSCLineReason']
FROM [acecodetable].['15_PSCLineReason'];

Vielleicht wird es für jemanden nützlich sein.

In meinem Fall erkannte es das neue Schema nicht und auch der dbo war der Besitzer.

AKTUALISIEREN

EXECUTE sp_rename N'[acecodetable].[''TradeAgreementClaim'']', N'TradeAgreementClaim';

Hat für mich gearbeitet. Ich fand es aus dem Skript, das beim Aktualisieren der PK für eine der Tabellen automatisch generiert wurde. Auf diese Weise wurde auch das neue Schema erkannt.


0

So ändern Sie einen Tabellennamen mit einem anderen Schema:

Beispiel: Ändern Sie dbo.MyTable1 in wrk.MyTable2

EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'

ALTER SCHEMA wrk TRANSFER dbo.MyTable2
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.