Rename column SQL Server 2008
我正在使用SQL Server 2008和Navicat。我需要使用SQL重命名表中的列。
1 | ALTER TABLE TABLE_NAME RENAME COLUMN old_name TO new_name; |
这句话行不通。
使用
1 | EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN' |
请参见:SQL Server–如何重命名列名或表名
文档:sp_rename(Transact-SQL)
对于您的情况,它将是:
1 | EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN' |
号
请记住使用单引号将值括起来。
或者,您可以在Microsoft SQL Server Management Studio中执行此操作。以下是使用GUI的几种快速方法:
第一条路缓慢双击列。列名将成为可编辑的文本框。
第二路右键单击列,然后从上下文菜单中选择"重命名"。
例如:
。
第三方向当需要一次重命名多个列时,最好使用这种方法。
例如:氧化镁
注意:我知道op特别要求SQL解决方案,认为这可能有助于其他人:)
尝试:
1 | EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN' |
还应指定表的架构,否则可能会出现此错误:
Msg 15248, Level 11, State 1, Procedure sp_rename, Line 238 Either the
parameter @objname is ambiguous or the claimed @objtype (COLUMN) is
wrong.
号
如果它是一个部署脚本,我还建议向它添加一些额外的安全性。
1 2 3 | 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 automatically renames the associated index whenever a PRIMARY KEY or UNIQUE constraint is renamed. If a renamed index is tied to a PRIMARY KEY constraint, the PRIMARY KEY constraint is also automatically renamed by sp_rename. sp_rename can be used to rename primary and secondary XML indexes.
号
可以使用
1 2 3 4 | USE YourDatabase; GO EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN'; GO |
第一个参数是要修改的对象,第二个参数是要给对象命名的新名称,第三个参数列通知服务器重命名是针对
因为我经常来这里,然后想知道如何使用括号,这个答案可能对像我这样的人有用。
1 | EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN'; |
。
OldColumnName 不能在[] 中。它不起作用。- 不要把
NewColumnName 放进[] 中,会导致[[NewColumnName]] 。
SQL Server Management Studio具有一些系统定义的存储过程(SP)其中一个用于重命名列。sp是sp_rename
语法:sp_rename'[表名称]。old_column_name'、'new_column_name'有关进一步的帮助,请参阅本文:sp_rename by microsoft docs
注意:在执行此sp时,SQL Server将向您发出一条警告消息:"警告:更改对象名称的任何部分都可能破坏脚本和存储过程"。只有在编写了自己的sp(该sp涉及要更改的表中的列)时,这一点才至关重要。
@taher的改进版
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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重命名它…