Я использую SQL Server 2008 и Navicat. Мне нужно переименовать столбец в таблице с помощью SQL.
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
Это утверждение не работает.
Я использую SQL Server 2008 и Navicat. Мне нужно переименовать столбец в таблице с помощью SQL.
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
Это утверждение не работает.
Используйте sp_rename
EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'
Смотрите: SQL SERVER - как переименовать имя столбца или имя таблицы
Документация: sp_rename (Transact-SQL)
В вашем случае это будет:
EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'
Не забудьте использовать одинарные кавычки, чтобы заключить ваши значения.
В качестве альтернативы SQL
вы можете сделать это в Microsoft SQL Server Management Studio. Вот несколько быстрых способов использования GUI:
Медленно дважды щелкните по столбцу. Имя столбца станет редактируемым текстовым полем.
Щелкните правой кнопкой мыши по столбцу и выберите "Переименовать" в контекстном меню.
Например:
Этот способ предпочтительнее, когда вам нужно переименовать несколько столбцов за один раз.
Например:
ПРИМЕЧАНИЕ: Я знаю, что OP специально запросил решение SQL, подумал, что это может помочь другим:)
Try:
EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN'
Вам также следует указать схему таблицы, иначе вы можете получить эту ошибку:
Сообщение 15248, уровень 11, состояние 1, процедура sp_rename, строка 238. параметр @objname является неоднозначным или заявленный @objtype (COLUMN) равен неправильно.
Если это сценарий развертывания, я бы также порекомендовал добавить к нему дополнительную защиту.
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';
Было бы неплохо использовать уже встроенную функцию, но есть и другой способ:
Преимущество использования sp_rename
состоит в том, что он заботится обо всех связанных с ним отношениях.
Из документации:
sp_rename автоматически переименовывает связанный индекс всякий раз, когда ограничение PRIMARY KEY или UNIQUE переименовывается. Если переименованный индекс связан с ограничением PRIMARY KEY, ограничение PRIMARY KEY также автоматически переименовывается в sp_rename. sp_rename может использоваться для переименования первичных и вторичных индексов XML.
Вы можете использовать sp_rename
, чтобы переименовать столбец.
USE YourDatabase;
GO
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';
GO
Первый параметр - это объект, который должен быть изменен, вторым параметром является новое имя, которое будет передано объекту, а третий параметр COLUMN сообщает серверу, что имя переименования для column
, а также может быть используется для переименования tables
, index
и alias data type
.
Поскольку я часто прихожу сюда, а затем задаюсь вопросом, как использовать скобки, этот ответ может быть полезен для таких, как я.
EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN';
OldColumnName
не должен находиться в []
. Это не сработает.NewColumnName
в []
, это приведет к [[NewColumnName]]
.В Sql Server Management Studio есть определенные системные хранимые процедуры (SP)
Один из которых используется для переименования столбца. SP - sp_rename
Синтаксис: sp_rename '[table_name].old_column_name', 'new_column_name'
Для получения дополнительной помощи обратитесь к этой статье: sp_rename от Microsoft Docs
Примечание: При выполнении этого SP сервер sql выдаст вам предупреждающее сообщение "Осторожно: изменение любой части имени объекта может привести к поломке скриптов и хранимых процедур". Это важно, только если вы написали свой собственный sp, который включает столбец в таблице, которую вы собираетесь изменить.
Улучшенная версия @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
Или вы можете просто дважды щелкнуть столбец в SQL Management Studio и переименовать его через пользовательский интерфейс...