改名时如果有其他用户会话连接该数据库会报错,必须先杀掉那些用户会话或使数据库处于单用户模式下再执行。
查询当前有哪些会话连接到这个数据库
|
1 |
SELECT SPID FROM master.dbo.sysprocesses WHERE dbid=DB_ID('Test1'); |
如果有,执行KILL命令杀掉
|
1 |
KILL SPID |
也可以将数据库设置为单用户模式。在数据库属性 -> “连接”页面 找到“限制访问”选项,选择SIGLE_USER。
![clip_image002[4]](https://www.f11.cn/uploads/allimg/251016/212J0E57-0.png)
命令行
|
1 2 3 4 5 6 |
use master -- 设置单用户 exec sp_dboption @dbname='OldDbName', @optname= 'Single User',@optvalue= 'TRUE' -- 恢复多用户 exec sp_dboption @dbname='NewDbName', @optname= 'Single User', @optvalue='FALSE' GO |

|
1 2 3 4 |
USE master; GO ALTER DATABASE Test1 MODIFY NAME = Test; GO |
或者设置为单用户模式再改
|
1 2 3 |
ALTER DATABASE db名 SET SINGLE_USER WITH ROLLBACK IMMEDIATE; ALTER DATABASE 旧db名 MODIFY NAME = 新db名; ALTER DATABASE db名 SET MULTI_USER; |
注意:SQL Server 2008后续版本将删除该功能。
语法: sp_renamedb [ @dbname = ] 'old_name' , [ @newname = ] 'new_name'
例子: 将数据库Test_1的名称修改为Test
|
1 2 3 4 |
use master go exec sp_renamedb @dbname='Test_1', @newname='Test'; go |
直接利用脚本修改
|
1 2 3 4 5 |
use master exec sp_dboption @dbname='OldDbName', @optname= 'Single User',@optvalue= 'TRUE' exec sp_renamedb @dbname='OldDbName', @newname= 'NewDbName' exec sp_dboption @dbname='NewDbName', @optname= 'Single User', @optvalue='FALSE' GO |
检查修改成功
|
1 |
SELECT name, database_id FROM sys.databases WHERE name = N'DbName'; |