代码改变世界

步步为营:因为数据库正在使用,所以无法获得对数据库的独占访问权

2012-09-19 15:06  薛凯凯圆滚滚  阅读(284)  评论(1编辑  收藏  举报

还原数据库出错: ” 因为数据库正在使用,所以无法获得对数据库的独占访问权 “ 的解决方案

在还原数据库时 , 有时会提示因为数据库正在使用,所以无法获得对数据库的独占访问权 !!
这时需要在还原数据库前先杀死正在使用数据库的线程 .

该解决方案用到了系统表中的 sysprocesses ,若要访问 sysprocesses ,您必须定位到 master 数据库。

以下是杀死正在使用 'Education' 数据库的线程 :

use master

declare @dbname varchar ( 20)

set @dbname = 'Education'

 

declare @sql nvarchar ( 500)

declare @spid int --SPID 值是当用户进行连接时指派给该连接的一个唯一的整数

set @sql = 'declare getspid cursor for

select spid from sysprocesses where dbid=db_id(''' + @dbname + ''')'

exec ( @sql )

open getspid

fetch next from getspid into @spid

while @@fetch_status <>- 1-- 如果 FETCH 语句没有执行失败或此行不在结果集中。

begin

exec ( 'kill ' + @spid ) -- 终止正常连接

fetch next from getspid into @spid

end

close getspid

deallocate getspid