Renomear a coluna SQL Server 2008


653

Estou usando o SQL Server 2008 e o Navicat. Eu preciso renomear uma coluna em uma tabela usando SQL.

ALTER TABLE table_name RENAME COLUMN old_name to new_name;

Esta declaração não funciona.



5
Observe que essa não é uma duplicata da pergunta nº 174582, que é vinculada: esta é específica para o MS SQL, outra é independente do banco de dados.

Respostas:


1195

Usar sp_rename

EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'

Consulte: SQL SERVER - Como renomear um nome de coluna ou nome de tabela

Documentação: sp_rename (Transact-SQL)

Para o seu caso, seria:

EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'

Lembre-se de usar aspas simples para incluir seus valores.


24
Observe que você não deve colocar o NewColumnName entre colchetes, pois o SQL Server usará [[[NewColumnName]]]] como o nome da nova coluna. Além disso, sp_rename deve ser prefixado por EXEC ou EXECUTE.
— Mark Freeman

29
Você tem permissão e é incentivado a colocar colchetes no primeiro parâmetro, identificando a coluna, mas não no segundo parâmetro. Assim:EXEC sp_RENAME '[TableName].[OldColumnName]', 'NewColumnName', 'COLUMN'
— Niels Brinch

2
Você deve observar na sua resposta que estes valores alças padrão de procedimento armazenado, nulos etc contraints ao fazer a mudança de nome, ao contrário de uma planície alter tableque falhará se existem tais restrições.
— Tuncay Göncüoğlu

4
Observe que se você usar 'table_name.new_name', ele se tornará [schema]. [Table_name]. [Table_name.new_name] - portanto, não coloque esse nome de tabela no novo nome! (ele está correto nesta resposta, apenas adicionando uma nota para espreitadelas)
— Mark Schultheiss

1
Se houver um esquema no banco de dados, você deverá colocar o nome do esquema antes do nome da tabela: EXEC sp_RENAME 'nome_do_ esquema \ nome da tabela.nome_da_tabela.old_name', 'novo_nome', 'COLUNA'
— 23/04/19

106

Como alternativa SQL, você pode fazer isso no Microsoft SQL Server Management Studio. Aqui estão algumas maneiras rápidas de usar a GUI:

Primeira Via

Lentamente, clique duas vezes na coluna. O nome da coluna se tornará uma caixa de texto editável.


Segunda Via

Clique com o botão direito do mouse na coluna e escolha Renomear no menu de contexto.

Por exemplo:

Para renomear o nome da coluna


Terceira Via

Dessa forma, é preferível quando você precisar renomear várias colunas de uma só vez.

  1. Clique com o botão direito do mouse na tabela que contém a coluna que precisa ser renomeada.
  2. Clique em Design .
  3. No painel de design da tabela, clique e edite a caixa de texto do nome da coluna que você deseja alterar.

Por exemplo: Exemplo de design da tabela MSSMS

NOTA: Eu sei que o OP pediu especificamente uma solução SQL, pensei que isso poderia ajudar outras pessoas :)


1
Ou o usuário não tem os privilégios.
— Carrie Kendall

6
Nunca faça isso. Você está copiando a tabela, largando a antiga e renomeando-a. NUNCA use a GUI NUNCA para alterar qualquer coisa sobre uma tabela.
— HLGEM

6
@HLGEM essa é uma declaração bastante grande. De qualquer forma, você pode fornecer recursos para o que explicou? ou seja, deixar cair a mesa, etc. #
— Carrie Kendall

2
@ CarrieKendall, escreva a alteração na GUI em vez de fazê-la e você verá. É por isso que é muito mais lento fazer uma alteração usando a GUI em uma tabela grande do que usando sp_rename ou alter table. Além disso, as alterações na estrutura do banco de dados são alterações de código e devem estar no controle de origem como outro código, portanto, devem estar em um script. Isso é especialmente importante se você não permitir que os direitos do banco de dados de produção dev alterem as tabelas, pois você precisará do script em qualquer caso. E você não deseja copiar, soltar e recriar tabelas com milhões de registros em prod.
— HLGEM

18
Acabei de renomear uma tabela do SQL Server 2012 usando o Management Studio com o criador de perfil em execução e ele usou sp_rename. Não posso falar para versões anteriores.
— 21815 Steve Dowling

58

Tentar:

EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN'

27

Você também deve especificar o esquema da tabela ou poderá receber este erro:

Msg 15248, Nível 11, Estado 1, sp_rename do procedimento, Linha 238 O parâmetro @objname é ambíguo ou o @objtype reivindicado (COLUMN) está errado.

Se for um script de implantação, eu também recomendaria adicionar alguma segurança adicional a ele.

IF EXISTS (
        SELECT 1
        FROM sys.columns
        WHERE
            name = 'OldColumnName' AND
            object_name(object_id) = 'TableName'
    ) AND
    NOT EXISTS (
        SELECT 1
        FROM sys.columns
        WHERE
            name = 'NewColumnName' AND
            object_name(object_id) = 'TableName'
    )
    EXEC sp_RENAME 'SchemaName.TableName.OldColumnName', 'NewColumnName', 'COLUMN';

Eu gosto dessa abordagem segura, boa para escrever migrações que podem ou não ser executadas em ambientes diferentes.
— Adil H. Raza #

como a verificação de existência, me faz sentir ok Reexecução como parte de um lote de outros scripts
— unnknown

19

Seria uma boa sugestão usar uma função já incorporada, mas outra maneira de contornar é:

  1. Crie uma nova coluna com o mesmo tipo de dados e NEW NAME.
  2. Execute uma instrução UPDATE / INSERT para copiar todos os dados para uma nova coluna.
  3. Solte a coluna antiga.

O benefício por trás do uso do sp_renameé que ele cuida de todas as relações associadas a ele.

A partir da documentação :

sp_rename renomeia automaticamente o índice associado sempre que uma restrição PRIMARY KEY ou UNIQUE for renomeada. Se um índice renomeado estiver vinculado a uma restrição PRIMARY KEY, a restrição PRIMARY KEY também será renomeada automaticamente por sp_rename. sp_rename pode ser usado para renomear índices XML primários e secundários.


* No passo 1 NULL tem de ser permitido na nova coluna * adicionar Opcionalmente quarto passo de mudar nova coluna, que não permite valores nulos
— BitLauncher

16

Você pode usar sp_renamepara renomear uma coluna.

USE YourDatabase;  
GO  
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';  
GO  

O primeiro parâmetro é o objeto a ser modificado, o segundo parâmetro é o novo nome que será dado ao objeto, e o terceiro parâmetro COLUNA informa ao servidor que a renomeação é para o column, e também pode ser usado para mudar o nome tables, indexe alias data type.


2
Não entendo, por que você adiciona uma nova resposta mesmo acima de 4 em 5 menciona sp_rename ...?
— Pawel Czapski

3
Em algum momento, alguém teria que explicar aqui o funcionamento do parâmetro, ninguém fez isso
— Alexandre Neukirchen

1
Sim, na verdade você está certo, para mim é tão óbvio, mas para novos rapazes pode não ser.
— Pawel Czapski

12

Como muitas vezes venho aqui e depois me pergunto como usar os colchetes, essa resposta pode ser útil para pessoas como eu.

EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN'; 
  • A OldColumnNamenão deve estar em []. Isso não vai funcionar.
  • Não coloque NewColumnNameem [], ele irá resultar em [[NewColumnName]].

3

O Sql Server management studio possui alguns procedimentos definidos pelo sistema (SP),
um dos quais é usado para renomear uma coluna. O SP é sp_rename

Sintaxe: sp_rename '[table_name] .old_column_name', 'new_column_name'
Para obter mais ajuda, consulte este artigo: sp_rename do Microsoft Docs

Nota: Na execução deste SP, o servidor sql fornecerá uma mensagem de aviso como ' Cuidado: alterar qualquer parte do nome de um objeto pode interromper scripts e procedimentos armazenados '. Isso é crítico apenas se você tiver escrito seu próprio sp, que envolve a coluna na tabela que você está prestes a mudar.


2

Versão aprimorada do @Taher

DECLARE @SchemaName AS VARCHAR(128)
DECLARE @TableName AS VARCHAR(128)
DECLARE @OldColumnName AS VARCHAR(128)
DECLARE @NewColumnName AS VARCHAR(128)
DECLARE @ParamValue AS VARCHAR(1000)

SET @SchemaName = 'dbo'
SET @TableName = 'tableName'
SET @OldColumnName = 'OldColumnName'
SET @NewColumnName = 'NewColumnName'
SET @ParamValue = @SchemaName + '.' + @TableName + '.' + @OldColumnName

IF EXISTS
(
    SELECT 1 FROM sys.columns WHERE name = @OldColumnName AND OBJECT_NAME(object_id) = @TableName
)
AND NOT EXISTS
(
    SELECT 1 FROM sys.columns WHERE name = @NewColumnName AND OBJECT_NAME(object_id) = @TableName
)
BEGIN
    EXEC sp_rename @ParamValue, @NewColumnName, 'COLUMN';
END

0

Ou você pode clicar duas vezes lentamente na coluna no SQL Management Studio e renomeá-la através da interface do usuário ...


-1

Executar consulta:

    SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'

Por favor, não repita respostas antigas e existentes com muitos votos positivos.
— TT.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.