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

sp_renamedb

语法


sp_renamedb <dbname>, <newname>

参数

<dbname>

是数据库的原始名称。

<newname>

是数据库的新名称。数据库名称必须符合标识符的规则,而且必须唯一。

示例

示例 1

将 accounting 数据库重命名为 financial:


sp_renamedb accounting, financial

示例 2

将名为 work(Transact-SQL 保留字 , )的数据库重命名为 workdb。下面的示例显示如何在重命名 work 数据库之前使用 sp_dboption 将该数据库置于单用户模式,并在重命名之后将其恢复到多用户模式:


sp_dboption work, single, true
go
use work 
go
checkpoint 
go
sp_renamedb work, workdb 
go
use master 
go
sp_dboption workdb, single, false 
go
use workdb 
go
checkpoint
go

用法

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

  • sp_renamedb 更改数据库的名称。不能重命名系统数据库或具有外部参照完整性约束的数据库。

  • 系统管理员在重命名数据库之前必须使用 sp_dboption 将其置于单用户模式,并在重命名之后将其恢复到多用户模式。

  • 如果数据库中有任何表引用另一个数据库中的表或被另一个数据库中的表引用,sp_renamedb 将失败。使用下面的查询可确定哪些表和外部数据库对当前数据库中的主键表具有外键约束:

    
    select object_name(tableid), db_name(frgndbid)
    from sysreferences
    where frgndbid is not null
    

    使用下面的查询可确定哪些表和外部数据库对当前数据库中的外键表具有主键约束:

    
    select object_name(reftabid), db_name(pmrydbid)
    from sysreferences
    where pmrydbid is not null
    

    使用 alter table 删除这些表中的跨数据库约束。然后,重新运行 sp_renamedb。

  • 更改了数据库名称后:

    - 删除所有包含该数据库名称的存储过程、触发器和视图

    - 更改被删除对象的源文本以反映新数据库名称

    - 重新创建删除的对象

    - 更改在 use <database_name> 命令中或者作为全限定标识符的一部分(采用的格式为 <dbname>.[<owner>].<objectname>)引用该数据库的所有应用程序和 SQL 源脚本

  • 如果您使用脚本对数据库运行 dbcc 命令或 dump database 和 dump transaction 命令,一定要更新这些脚本。

    > 警告

    依赖于名称发生了更改的数据库的过程、触发器和视图在重新创建它们之前一直有效。请在执行 sp_renamedb 后更改所有相关对象的定义。使用 sp_depends 可以找到相关对象。