重命名列SQL Server 2008

Ser*_*zin 617 sql sql-server alter-table sql-server-2008

我正在使用SQL Server 2008和Navicat.我需要使用SQL重命名表中的列.

ALTER TABLE table_name RENAME COLUMN old_name to new_name;
Run Code Online (Sandbox Code Playgroud)

此声明不起作用.

Hab*_*bib 1127

使用 sp_rename

EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'
Run Code Online (Sandbox Code Playgroud)

请参阅:SQL SERVER - 如何重命名列名或表名

文档:sp_rename(Transact-SQL)

对于你的情况,它将是:

EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'
Run Code Online (Sandbox Code Playgroud)

请记住使用单引号括起您的值.

  • 允许并鼓励您在第一个参数中添加括号,标识列,但不在第二个参数中.像这样:`EXEC sp_RENAME'[TableName].[OldColumnName]','NewColumnName','COLUMN' (28认同)
  • 请注意,不应将NewColumnName放在括号中,因为SQL Server将使用[[[NewColumnName]]]作为新列的名称.另外,sp_rename应该以EXEC或EXECUTE为前缀. (22认同)
  • 请注意,如果您使用'table_name.new_name',它将变为[schema].[table_name].[table_name.new_name] - 所以不要将该表名放在新名称中!(这个答案是正确的,只是为偷看添加一个注释) (3认同)
  • 您应该在回答中注意,此存储过程在重命名时处理默认值、null 等 **contraints**,而不是普通的“alter table”,如果存在此类约束,则会失败。 (2认同)
  • 如果数据库中有架构,您必须将架构名称放在表名之前: EXEC sp_RENAME 'schema_name.table_name.old_name', 'new_name', 'COLUMN' (2认同)

Car*_*all 100

或者SQL,您可以在Microsoft SQL Server Management Studio中执行此操作.以下是使用GUI的一些快速方法:

第一道路

慢慢双击该列.列名称将成为可编辑的文本框.


第二种方式

右键单击列,然后从上下文菜单中选择"重命名".

例如:

重命名列名称


第三种方式

当您需要一次重命名多个列时,这种方式更为可取.

  1. 右键单击包含需要重命名的列的表.
  2. 单击设计.
  3. 在表格设计面板中,单击并编辑要更改的列名称的文本框.

例如: MSSMS表设计实例

注意:我知道OP专门要求SQL解决方案,认为这可能有助于其他人:)

  • 我刚刚使用Management Studio重命名了一个SQL Server 2012表,并运行了profiler,它使用了sp_rename.但不能代表早期版本. (18认同)
  • @HLGEM这是一个非常大的一揽子声明.无论如何,您能为您所解释的内容提供任何资源吗?即丢桌子等 (6认同)
  • 从来没有这样做过.您正在复制表,然后删除旧表并重命名.切勿使用GUI EVER来更改表格的任何内容. (5认同)
  • @CarrieKendall,编写GUI的变化而不是制作它,你会看到.这就是为什么使用GUI对大型表进行更改比使用sp_rename或alter table要慢得多的原因.此外,对数据库结构的更改是代码更改,应该像其他代码一样处于源代码控制中,因此应该在脚本中.如果您不允许dev生产数据库权限更改表,这一点尤其重要,因为在任何情况下您都需要脚本.并且您不希望复制,删除和重新创建具有数百万条记录的表格. (2认同)

Tec*_*hDo 57

尝试:

EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN'
Run Code Online (Sandbox Code Playgroud)


小智 25

您还应该指定表的架构,否则可能会收到此错误:

消息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';
Run Code Online (Sandbox Code Playgroud)


Nev*_*ess 19

使用已经内置的功能是一个很好的建议,但另一种方法是:

  1. 创建具有相同数据类型和新名称的新列.
  2. 运行UPDATE/INSERT语句将所有数据复制到新列中.
  3. 放下旧栏目.

使用sp_rename它的好处是它处理与之相关的所有关系.

文档:

每当重命名PRIMARY KEY或UNIQUE约束时,sp_rename都会自动重命名关联的索引.如果重命名的索引绑定到PRIMARY KEY约束,则sp_rename也会自动重命名PRIMARY KEY约束.sp_rename可用于重命名主XML索引和辅助XML索引.


Ale*_*hen 16

您可以使用sp_rename重命名列.

USE YourDatabase;  
GO  
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';  
GO  
Run Code Online (Sandbox Code Playgroud)

第一个参数是要修改的对象,第二个参数是将赋予对象的新名称,第三个参数COLUMN通知服务器重命名用于column,也可以用于重命名tables,indexalias data type.

  • 不明白,为什么要在 5 次提及 sp_rename 的 4 次以上添加新答案...? (2认同)
  • 在某些时候,有人必须在这里解释参数的操作,没有人这样做 (2认同)

Hon*_*zaB 12

由于我经常来这里然后想知道如何使用括号,这个答案可能对像我这样的人有用.

EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN'; 
Run Code Online (Sandbox Code Playgroud)
  • OldColumnName不能在[].不起作用.
  • 不要把NewColumnName进入[],它会导致成[[NewColumnName]].


Rik*_*tel 6

@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
Run Code Online (Sandbox Code Playgroud)