sp_renamedb <dbname>, <newname>
<dbname>
是数据库的原始名称。
<newname>
是数据库的新名称。数据库名称必须符合标识符的规则,而且必须唯一。
将 accounting 数据库重命名为 financial:
sp_renamedb accounting, financial
将名为 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 时,还存在一些其它注意事项:
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 源脚本
> 警告
依赖于名称发生了更改的数据库的过程、触发器和视图在重新创建它们之前一直有效。请在执行 sp_renamedb 后更改所有相关对象的定义。使用 sp_depends 可以找到相关对象。