La SQL
query che ho usato è:
ALTER TABLE oldtable RENAME TO newtable;
Ma mi dà un errore.
Server: messaggio 156, livello 15, stato 1, riga 1
Sintassi errata vicino alla parola chiave "TO".
La SQL
query che ho usato è:
ALTER TABLE oldtable RENAME TO newtable;
Ma mi dà un errore.
Server: messaggio 156, livello 15, stato 1, riga 1
Sintassi errata vicino alla parola chiave "TO".
Risposte:
Per rinominare una tabella in SQL Server, utilizzare il sp_rename
comando:
exec sp_rename 'schema.old_table_name', 'new_table_name'
'NewName'
campo, altrimenti la tua tabella potrebbe finire per assomigliare a qualcosa del genere dbo.dbo.NewName
.
CREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
Per rinominare una colonna:
sp_rename 'table_name.old_column_name', 'new_column_name' , 'COLUMN';
Per rinominare una tabella:
sp_rename 'old_table_name','new_table_name';
Quando usi sp_rename che funziona come nelle risposte sopra, controlla anche quali oggetti sono interessati dopo la ridenominazione, quel riferimento a quella tabella, perché devi cambiare anche quelli
Ho preso un esempio di codice per le dipendenze delle tabelle sul blog di Pinal Dave qui
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'
Quindi, anche tutti questi oggetti dipendenti devono essere aggiornati
Oppure, se possibile, usa alcuni componenti aggiuntivi, alcuni di essi hanno la funzione di rinominare gli oggetti e tutti dipendono anche da oggetti
Se si tenta di exec sp_rename
ricevere un errore LockMatchID, potrebbe essere utile aggiungere prima un'istruzione use [database]:
Provai
exec sp_rename '[database_name].[dbo].[table_name]', 'new_table_name';
-- Invalid EXECUTE statement using object "Object", method "LockMatchID".
Quello che dovevo fare per risolverlo era riscriverlo in:
use database_name
exec sp_rename '[dbo].[table_name]', 'new_table_name';
Nome tabella
sp_rename 'db_name.old_table_name', 'new_table_name'
Colonna
sp_rename 'db_name.old_table_name.name' 'userName', 'COLUMN'
Indice
sp_rename 'db_name.old_table_name.id', 'product_ID', 'INDEX'
disponibile anche per statica e tipi di dati
Questo è quello che uso:
EXEC sp_rename 'MyTable', 'MyTableNewName';
Nulla ha funzionato da qui proposto .. Quindi ho appena analizzato i dati in una nuova tabella
SELECT *
INTO [acecodetable].['PSCLineReason']
FROM [acecodetable].['15_PSCLineReason'];
forse sarà utile per qualcuno ..
Nel mio caso non ha riconosciuto il nuovo schema, anche il dbo era il proprietario.
AGGIORNARE
EXECUTE sp_rename N'[acecodetable].[''TradeAgreementClaim'']', N'TradeAgreementClaim';
Ha funzionato per me. L'ho trovato dallo script generato automaticamente durante l'aggiornamento del PK per una delle tabelle. In questo modo ha riconosciuto anche il nuovo schema.
.
in loro, utilizzare[]
intorno al nome della tabella. (Lo so, lo so, ma i punti possono accadere ...) Ad esempiosp_rename '[Stupid.name]', 'NewName'
o con schemasp_rename '[dbo.Stupid.name]', 'NewName'