A SQL
consulta que eu usei é:
ALTER TABLE oldtable RENAME TO newtable;
Mas, isso me dá um erro.
Servidor: mensagem 156, nível 15, estado 1, linha 1
Sintaxe incorreta perto da palavra-chave 'TO'.
A SQL
consulta que eu usei é:
ALTER TABLE oldtable RENAME TO newtable;
Mas, isso me dá um erro.
Servidor: mensagem 156, nível 15, estado 1, linha 1
Sintaxe incorreta perto da palavra-chave 'TO'.
Respostas:
Para renomear uma tabela no SQL Server, use o sp_rename
comando:
exec sp_rename 'schema.old_table_name', 'new_table_name'
'NewName'
campo, caso contrário, sua tabela pode acabar parecendo algo parecido dbo.dbo.NewName
.
CREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
Para renomear uma coluna:
sp_rename 'table_name.old_column_name', 'new_column_name' , 'COLUMN';
Para renomear uma tabela:
sp_rename 'old_table_name','new_table_name';
Ao usar sp_rename, que funciona como nas respostas acima, verifique também quais objetos são afetados após renomear, que fazem referência a essa tabela, porque você também precisa alterá-los
Tomei um exemplo de código para dependências de tabela no blog de Pinal Dave aqui
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'
Portanto, todos esses objetos dependentes precisam ser atualizados também
Ou use algum suplemento, se puder, alguns deles possuem recursos para renomear objetos e todos dependem também de objetos ent
Se você tentar exec sp_rename
receber um erro LockMatchID, poderá ser útil adicionar uma instrução use [database] primeiro:
eu tentei
exec sp_rename '[database_name].[dbo].[table_name]', 'new_table_name';
-- Invalid EXECUTE statement using object "Object", method "LockMatchID".
O que eu tive que fazer para corrigi-lo foi reescrevê-lo para:
use database_name
exec sp_rename '[dbo].[table_name]', 'new_table_name';
Nome da tabela
sp_rename 'db_name.old_table_name', 'new_table_name'
Coluna
sp_rename 'db_name.old_table_name.name' 'userName', 'COLUMN'
Índice
sp_rename 'db_name.old_table_name.id', 'product_ID', 'INDEX'
também disponível para estática e tipos de dados
Isto é o que eu uso:
EXEC sp_rename 'MyTable', 'MyTableNewName';
Nada funcionou a partir da proposta aqui. Então, apenas coloquei os dados em uma nova tabela
SELECT *
INTO [acecodetable].['PSCLineReason']
FROM [acecodetable].['15_PSCLineReason'];
talvez seja útil para alguém ..
No meu caso, ele não reconheceu o novo esquema e também o dbo era o proprietário.
ATUALIZAR
EXECUTE sp_rename N'[acecodetable].[''TradeAgreementClaim'']', N'TradeAgreementClaim';
Trabalhou para mim. Encontrei a partir do script gerado automaticamente ao atualizar o PK para uma das tabelas. Dessa forma, também reconheceu o novo esquema.
Para alterar um nome de tabela com um esquema diferente:
Exemplo: Altere dbo.MyTable1 para wrk.MyTable2
EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'
ALTER SCHEMA wrk TRANSFER dbo.MyTable2
.
, use[]
-o em torno do nome da tabela. (Eu sei, eu sei, mas os pontos podem acontecer ...) Por exemplo,sp_rename '[Stupid.name]', 'NewName'
ou com esquemasp_rename '[dbo.Stupid.name]', 'NewName'