Переименовать столбец SQL Server 2008

Я использую SQL Server 2008 и Navicat. Мне нужно переименовать столбец в таблице с помощью SQL.

ALTER TABLE table_name RENAME COLUMN old_name to new_name;

Это утверждение не работает.

Ответ 1

Используйте 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'

Не забудьте использовать одинарные кавычки, чтобы заключить ваши значения.

Ответ 2

В качестве альтернативы SQL вы можете сделать это в Microsoft SQL Server Management Studio. Вот несколько быстрых способов использования GUI:

Первый способ

Медленно дважды щелкните по столбцу. Имя столбца станет редактируемым текстовым полем.


Второй путь

Щелкните правой кнопкой мыши по столбцу и выберите "Переименовать" в контекстном меню.

Например:

To Rename column name


Третий путь

Этот способ предпочтительнее, когда вам нужно переименовать несколько столбцов за один раз.

  • Щелкните правой кнопкой мыши на таблице, содержащей столбец, который нуждается в переименовании.
  • Нажмите "Дизайн".
  • На панели проектирования таблиц щелкните и отредактируйте текстовое поле имени столбца, которое вы хотите изменить.

Например: MSSMS Table Design Example

ПРИМЕЧАНИЕ: Я знаю, что OP специально запросил решение SQL, подумал, что это может помочь другим:)

Ответ 3

Try:

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

Ответ 4

Вам также следует указать схему таблицы, иначе вы можете получить эту ошибку:

Сообщение 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';

Ответ 5

Было бы неплохо использовать уже встроенную функцию, но есть и другой способ:

  1. Создайте новый столбец с тем же типом данных и NEW NAME.
  2. Запустите инструкцию UPDATE/INSERT, чтобы скопировать все данные в новый столбец.
  3. Оставьте старый столбец.

Преимущество использования sp_rename состоит в том, что он заботится обо всех связанных с ним отношениях.

Из документации:

sp_rename автоматически переименовывает связанный индекс всякий раз, когда ограничение PRIMARY KEY или UNIQUE переименовывается. Если переименованный индекс связан с ограничением PRIMARY KEY, ограничение PRIMARY KEY также автоматически переименовывается в sp_rename. sp_rename может использоваться для переименования первичных и вторичных индексов XML.

Ответ 6

Вы можете использовать sp_rename, чтобы переименовать столбец.

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

Первый параметр - это объект, который должен быть изменен, вторым параметром является новое имя, которое будет передано объекту, а третий параметр COLUMN сообщает серверу, что имя переименования для column, а также может быть используется для переименования tables, index и alias data type.

Ответ 7

Поскольку я часто прихожу сюда, а затем задаюсь вопросом, как использовать скобки, этот ответ может быть полезен для таких, как я.

EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN'; 
  • OldColumnName не должен находиться в []. Это не сработает.
  • Не помещайте NewColumnName в [], это приведет к [[NewColumnName]].

Ответ 8

В 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, который включает столбец в таблице, которую вы собираетесь изменить.

Ответ 9

Улучшенная версия @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

Ответ 10

Или вы можете просто дважды щелкнуть столбец в SQL Management Studio и переименовать его через пользовательский интерфейс...