Я використовую 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. Ось кілька швидких способів використання графічного інтерфейсу:
Повільно двічі клацніть на стовпчику. Назва стовпця стане редагованим текстовим полем.
Клацніть правою кнопкою миші на стовпці та виберіть Перейменувати у контекстному меню.
Наприклад:
Цей спосіб є кращим, коли вам потрібно перейменувати кілька стовпців за один раз.
Наприклад:
ПРИМІТКА: Я знаю, що OP спеціально просив рішення SQL, думав, що це може допомогти іншим :)
Ви також повинні вказати схему таблиці, або ви можете отримати цю помилку:
Msg 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, обмеження 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 студія управління сервером має деяку систему , певну збережені процедури (SP)
Один з них використовується для перейменування column.The SP є sp_rename
Синтаксис: ім'я sp_rename '[ім'я_матеріали] .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'