我使用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解决方案,认为这可能会帮助别人:)
尝试:
EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN'
你还应该指定表的架构或者你可能会得到这样的错误:
消息15248,级别11,状态1,过程sp_rename可以,238线在任何参数@objname不明确或所要求的@objtype(列)是错误的。
如果它是一个部署脚本我还建议增加一些额外的安全吧。
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)
其中之一是用于重命名一个column.The SP是sp_rename
语法:sp_rename '[表名] .old_column_name', 'new_column_name'
:为了进一步帮助请参阅这篇文章由微软文档sp_rename
注:在此执行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中列慢点击,并通过UI重新命名它...