您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

sp_rename

语法


sp_rename <objname>, <newname> [, "index" | "column" | "partition"]

参数

<objname>

是用户创建的对象(表、视图、列、分区、存储过程、索引、触发器、缺省值、规则、检查约束、参照约束或用户定义的数据类型)的原始名称。如果要重命名的对象是表中的某一列,<objname> 的格式必须为“<table>.<column>”。如果该对象是索引,<objname> 的格式必须为“<table>.<indexname>”

<newname>

是该对象或数据类型的新名称。该名称必须符合标识符的规则,而且在当前数据库中必须唯一。

index

指定要重命名的对象是索引,而不是列。使用此参数可以重命名与列具有相同名称的索引,而无需删除并重新创建该索引。

column

指定要重命名的对象是列,而不是索引。此参数与 index 参数是同一选项的组成部分。

partition

当表分区名与列或索引名冲突时,指定要重命名的对象是一个分区。

示例

示例 1

将 titles 表重命名为 books:


sp_rename titles, books

示例 2

将表 books 的列 title 重命名为 bookname:


sp_rename "books.title", bookname

示例 3

将表 books 的索引 titleind 重命名为 titleindex:


sp_rename "books.titleind", titleindex

示例 4

将用户定义的数据类型 tid 重命名为 bookid:


sp_rename tid, bookid

示例 5

将表 titles 的索引 title_id 重命名为 isbn:


sp_rename "titles.title_id", isbn, "index"

示例 6

将表索引 my_tab.ind1.i_part1 重命名为 i_part1_rename:


sp_rename "my_tab.ind1.i_part1", i_part1_rename

示例 7

使用 "partition" 将索引分区 my_tab.ind1.ind1_928003306 重命名为 ind1_928003306_rename 以避免表分区名和索引名之间的冲突:


sp_rename "my_tab.ind1.ind1_928003306", ind1_928003306_rename, "partition"

用法

使用 sp_rename 时,还存在一些其它注意事项:

  • sp_rename 用于更改用户创建的对象或数据类型的名称。在哪个数据库中发出 sp_rename,就只能更改哪个数据库中的对象或数据类型的名称。

  • 重命名列或索引时,不要在 <newname> 中指定表名。请参见示例 2、3 和 5。

  • 如果列与索引具有相同的名称,请使用 [,"<index>" | "<column>"] 参数,该参数指定是否重命名索引或列。在下面的示例中,假定名称为 idx 的索引和列都存在:

    
    <h2>sp_rename "t.idx", new_idx, "column"</h2>
    Column name has been changed. (Return status = 0)
    <h2>sp_rename "t.idx", new_idx, "index"</h2>
    Index name has been changed. (Return status = 0)
    

  • 如果更改视图引用的对象名或列名,将显示一条警告消息,例如:

    
    Changing an object or column name could break
    existing stored procedures, cached statements or
    other compiled objects.
    

  • sp_engine 可以在没有打开的事务时在使用链式事务模式的会话中运行。

  • 不能更改系统对象和系统数据类型的名称。