为何切换至master数据库后执行DROP DATABASE仍提示‘数据库正在使用’?
解决SQL Server删除并重建数据库时的冲突问题
执行以下SQL代码时:
USE master; GO DROP DATABASE IF EXISTS XyzCompany; CREATE DATABASE XyzCompany; GO USE XyzCompany; GO
会遇到两个连续错误:
- 执行
DROP DATABASE IF EXISTS XyzCompany时,报错:Msg 3702:无法删除数据库 "XyzCompany",因为它正在使用中 - 后续执行
CREATE DATABASE XyzCompany时,报错:Msg 1801:数据库 'XyzCompany' 已存在,请选择其他数据库名称
解决方案
在删除数据库前,先强制断开目标数据库的所有活动连接,确保数据库处于可删除状态:
USE master; GO -- 强制断开XyzCompany的所有连接并回滚未提交事务 ALTER DATABASE XyzCompany SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO DROP DATABASE IF EXISTS XyzCompany; GO CREATE DATABASE XyzCompany; GO USE XyzCompany; GO
说明
ALTER DATABASE XyzCompany SET SINGLE_USER WITH ROLLBACK IMMEDIATE会立即终止目标数据库的所有会话,回滚所有未完成的事务,让数据库切换到单用户模式,此时就能顺利执行删除操作,后续创建数据库也不会出现已存在的提示。
内容的提问来源于stack exchange,提问作者Tim Kruger
相关产品推荐
相关产品推荐

