我有一个程序需要多次创建和删除数据库,但是在删除数据库的某个时候,我在这里遇到异常:
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
为什么会这样?
执行此操作(删除数据库)的更好方法是什么?
答案 0 :(得分:2)
如果任何其他数据库已连接到数据库,则无法DROP
。仅运行DROP DATABASE MyDatabase;
并不会关闭这些连接,因此DROP
会失败。
将数据库更改为SINGLE USER
会丢弃所有现有连接(WITH ROLLBACK IMMEDIATE
会导致任何事务立即回滚,这对您DROP
数据库来说是个问题) 。然后,因为它是下一条语句,所以在任何人有机会重新连接之前,数据库都将被删除。