Antworten:
Verwenden Sie den folgenden sp_rename
Befehl, um eine Tabelle in SQL Server umzubenennen :
exec sp_rename 'schema.old_table_name', 'new_table_name'
'NewName'
Feld ein, da Ihre Tabelle sonst möglicherweise so aussieht dbo.dbo.NewName
.
CREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
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';
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
Wenn Sie versuchen, exec sp_rename
einen 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';
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
Das benutze ich:
EXEC sp_rename 'MyTable', 'MyTableNewName';
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.
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
.
, verwenden Sie[]
den Tabellennamen. (Ich weiß, ich weiß, aber Punkte können passieren ...) ZBsp_rename '[Stupid.name]', 'NewName'
oder mit Schemasp_rename '[dbo.Stupid.name]', 'NewName'