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'.

Schalter
quelle

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'
Jeff Hornby
quelle
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';
Ravi Kumar
quelle
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


quelle
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';
Stian
quelle
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

Budamivardi
quelle
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
7

Das benutze ich:

EXEC sp_rename 'MyTable', 'MyTableNewName';
Sylvain Rodrigue
quelle
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.

Tzvi Gregory Kaidanov
quelle
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
Live-Liebe
quelle