Я использую 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'
Не забудьте использовать одинарные кавычки, чтобы заключить ваши значения.
EXEC sp_RENAME '[TableName].[OldColumnName]', 'NewColumnName', 'COLUMN'
alter table
которая будет выполнена , если существуют такие ограничения.
В качестве альтернативы SQL
, вы можете сделать это в Microsoft SQL Server Management Studio. Вот несколько быстрых способов использования графического интерфейса:
Медленный двойной щелчок по столбцу. Имя столбца станет редактируемым текстовым полем.
Щелкните правой кнопкой мыши по столбцу и выберите Rename из контекстного меню.
Например:
Этот способ предпочтителен, если вам нужно переименовать несколько столбцов за один раз.
Например:
ПРИМЕЧАНИЕ: я знаю, что OP специально спрашивал о решении SQL, думал, что это может помочь другим :)
Вам также следует указать схему таблицы, иначе вы можете получить эту ошибку:
Сообщение 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
Запустить запрос:
SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'