ALTER DATABASE失败,因为无法在数据库<mydb>上放置锁

时间:2018-08-07 09:11:09

标签: sql-server

我有一个程序需要多次创建和删除数据库,但是在删除数据库的某个时候,我在这里遇到异常:

ALTER DATABASE failed because a lock could not be placed on database ...

命令如下:

USE master; 

IF EXISTS(select * from sys.databases where name='{0}')

BEGIN 

ALTER DATABASE [{0}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

DROP DATABASE [{0}]

END

为什么会这样?

执行此操作(删除数据库)的更好方法是什么?

1 个答案:

答案 0 :(得分:2)

如果任何其他数据库已连接到数据库,则无法DROP。仅运行DROP DATABASE MyDatabase;并不会关闭这些连接,因此DROP会失败。

将数据库更改为SINGLE USER会丢弃所有现有连接(WITH ROLLBACK IMMEDIATE会导致任何事务立即回滚,这对您DROP数据库来说是个问题) 。然后,因为它是下一条语句,所以在任何人有机会重新连接之前,数据库都将被删除。