我正在使用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;
该语句不起作用。
Answers:
采用 sp_rename
EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'
对于您的情况将是:
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中做到这一点。以下是使用GUI的几种快速方法:
缓慢双击该列。列名将成为可编辑的文本框。
右键单击列,然后从上下文菜单中选择“重命名”。
例如:
当您需要一次性重命名多个列时,这种方式是更可取的。
例如:
注意:我知道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';
建议使用已经内置的功能,但另一种方法是:
使用the的好处sp_rename
是它可以处理与之关联的所有关系。
从文档中:
只要重命名PRIMARY KEY或UNIQUE约束,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
。
Sql Server Management Studio具有一些系统定义的存储过程(SP),
其中一个用于重命名列.SP为sp_rename
语法: sp_rename'[table_name] .old_column_name','new_column_name'
有关更多帮助,请参考本文: Microsoft Docs提供的sp_rename
注意:执行此SP时,SQL Server会给您一条警告消息,内容为“警告:更改对象名称的任何部分都可能会破坏脚本和存储过程 ”。在表格中您将要更改。
@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