利用存储过程来重命名SQL Server数据库
最近遇到一个需要在多用户模式下重新命名数据库的Case, 因为数据库可能被其他用户使用,所以直接修改可能会失败。对于此种情况,我们可以等所有用户结束使用数据库时修改,或者是将数据库切换到单用户模式下进行操作。
有时候,我们在开发过程中需要直接把生产环境的数据库拿到开发环境来测试开发。我们可以直接重命名生产环境上的数据库。这样以来,即使你有些SQL没有保存,也可以直接从原来的数据库中抓取。
有两个重要的细节我们必须注意
- 当重名名数据库时, filegroup的名字和数据文件名(.mdf,.ldf)并不会发生变化。
- 用户必须切换到Master数据库上下文环境中,并具有SA的权限才可以重名名数据库。
USE master; GO -- 将数据库设置为单用户模式 EXEC sp_dboption AdventureWorks, 'Single User', True GO -- 重命名数据库 EXEC sp_renamedb 'AdventureWorks', 'AdventureWorks_New' GO -- 在将数据库设置回多用户模式 EXEC sp_dboption AdventureWorks_New, 'Single User', False GO
参考文献
- http://stackoverflow.com/questions/11014343/how-to-rename-database-in-multi-user-mode
- http://blog.sqlauthority.com/2007/09/19/sql-server-rename-database-to-new-name-using-stored-procedure-by-changing-to-single-user-mode/