我正在使用 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'
针对您的情况,可以使用以下方法:
EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'
记得使用单引号来包含您的值。
EXEC sp_RENAME '[TableName].[OldColumnName]', 'NewColumnName', 'COLUMN'
- Niels Brinchalter table
操作将会失败,如果存在此类约束条件,则需要注意此点。 - Tuncay Göncüoğlu`EXEC sp_rename 'dbo.department.dept_id', 'id', 'column';`
{ 其中表名=department,dept_id=旧列名,id=新列名 }
参考文档:https://learn.microsoft.com/en-us/sql/relational-databases/tables/rename-columns-database-engine?view=sql-server-ver15#TsqlProcedure
- Damilola Abioye除了使用SQL
之外,您可以在Microsoft SQL Server Management Studio中执行此操作。以下是一些使用GUI的快速方法:
双击列名,该列名将变成可编辑的文本框。
右键单击列,并从上下文菜单中选择“重命名”。
例如:
当您需要一次重命名多个列时,此方法更为可取。
例如:
注意:我知道OP特别要求SQL解决方案,但这可能有助于其他人:)
尝试:
EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN'
您还应该指定表的架构,否则可能会出现以下错误:
Msg 15248,Level 11,State 1,Procedure sp_rename,Line 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';
由于我经常来到这里,然后想知道如何使用括号,所以这个答案可能对像我一样的人有用。
EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN';
OldColumnName
不能在 []
中。这样是无效的。NewColumnName
放入 []
中,否则会得到 [[NewColumnName]]
。sp_rename
重命名列。USE YourDatabase;
GO
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';
GO
第一个参数是要修改的对象,第二个参数是将赋予对象的新名称,第三个参数COLUMN告知服务器重命名是针对列
,也可用于重命名表
、索引
和别名数据类型
。
使用已有的内置函数是一个好建议,但另一种方法是:
使用 sp_rename
的好处在于它会处理与之关联的所有关系。
根据文档:
当重新命名 PRIMARY KEY 或 UNIQUE 约束时,sp_rename 会自动重命名关联索引。如果重命名的索引与 PRIMARY KEY 约束相关联,则 sp_rename 还会自动重命名 PRIMARY KEY 约束。sp_rename 可用于重命名主要和次要 XML 索引。
改进版@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 Server管理工具包含一些系统定义的存储过程(SP),其中之一用于重命名列,该存储过程为sp_rename。
语法: sp_rename '[表名].旧列名', '新列名'
如需更多帮助,请参考此文章:Microsoft Docs中的sp_rename
注意: 在执行此存储过程时,SQL Server会给出一个警告信息:“警告:更改对象名称的任何部分都可能破坏脚本和存储过程”。这只有在你编写了自己的包含将要更改的表中的列的存储过程时才是关键。
或者您可以在SQL Management Studio中对该列进行两次慢速单击,然后通过UI重命名它...