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.
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.
Respostas:
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.
EXEC sp_RENAME '[TableName].[OldColumnName]', 'NewColumnName', 'COLUMN'
alter table
que falhará se existem tais restrições.
Como alternativa SQL
, você pode fazer isso no Microsoft SQL Server Management Studio. Aqui estão algumas maneiras rápidas de usar a GUI:
Lentamente, clique duas vezes na coluna. O nome da coluna se tornará uma caixa de texto editável.
Clique com o botão direito do mouse na coluna e escolha Renomear no menu de contexto.
Por exemplo:
Dessa forma, é preferível quando você precisar renomear várias colunas de uma só vez.
Por exemplo:
NOTA: Eu sei que o OP pediu especificamente uma solução SQL, pensei que isso poderia ajudar outras pessoas :)
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';
Seria uma boa sugestão usar uma função já incorporada, mas outra maneira de contornar é:
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.
Você pode usar sp_rename
para 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
, index
e alias data type
.
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';
OldColumnName
não deve estar em []
. Isso não vai funcionar.NewColumnName
em []
, ele irá resultar em [[NewColumnName]]
.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.
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
Executar consulta:
SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'