我正在使用SQL Server 2008和Navicat。我需要使用SQL重命名表中的列。
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
此声明不起作用。
答案 0 :(得分:1049)
使用sp_rename
EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'
请参阅:SQL SERVER – How to Rename a Column Name or Table Name
对于你的情况,它将是:
EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'
请记住使用单引号括起您的值。
答案 1 :(得分:91)
除SQL
之外,您可以在Microsoft SQL Server Management Studio中执行此操作。以下是使用GUI的一些快捷方法:
慢慢双击该列。列名称将成为可编辑的文本框。
右键单击列,然后从上下文菜单中选择“重命名”。
例如:
当您需要一次重命名多个列时,这种方式更为可取。
例如:
注意:我知道OP专门要求SQL解决方案,认为这可能有助于其他人:)
答案 2 :(得分:55)
尝试:
EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN'
答案 3 :(得分:18)
您还应该指定表的架构,否则可能会收到此错误:
消息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';
答案 4 :(得分:16)
使用已经内置的功能是一个很好的建议,但另一种方法是:
使用sp_rename
背后的好处是它会处理与之相关的所有关系。
每当重命名PRIMARY KEY或UNIQUE约束时,sp_rename会自动重命名关联的索引。如果重命名的索引绑定到PRIMARY KEY约束,则sp_rename也会自动重命名PRIMARY KEY约束。 sp_rename可用于重命名主XML索引和辅助XML索引。
答案 5 :(得分:14)
您可以使用sp_rename
重命名列。
USE YourDatabase;
GO
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';
GO
第一个参数是要修改的对象,第二个参数是将给予对象的新名称,第三个参数 COLUMN 通知服务器重命名用于{ {1}},也可用于重命名column
,tables
和index
。
答案 6 :(得分:11)
由于我经常来这里然后想知道如何使用括号,这个答案可能对像我这样的人有用。
EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN';
OldColumnName
不得在[]
。它不会起作用。NewColumnName
放入[]
,否则会导致[[NewColumnName]]
。答案 7 :(得分:3)
Sql Server管理工作室有一些系统定义的存储过程(SP)
其中一个用于重命名列.SP是 sp_rename
语法: sp_rename'[table_name] .old_column_name','new_column_name'
如需进一步的帮助,请参阅此文章:sp_rename by Microsoft Docs
注意: 执行此SP时,sql server会给出一条警告消息“警告:更改对象名称的任何部分都可能会破坏脚本和存储过程'。这只有在您编写了自己的sp时才是至关重要的,这涉及到您要更改的表中的列。
答案 8 :(得分:2)
@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
答案 9 :(得分:1)
就我而言,我正在使用MySQL WorkBench和
ALTER TABLE table_name RENAME COLUMN old_name new_name varchar(50) not null;
// without TO and specify data type of that column
足以更改列名!
答案 10 :(得分:0)
运行查询:
SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'
答案 11 :(得分:-2)
或者您可以在SQL Management Studio中的列上缓慢单击两次,然后通过UI重命名...