Я столкнулся с этой проблемой при автоматизации процесса восстановления в SQL Server 2008.
Мой (успешный) подход представлял собой сочетание двух предоставленных ответов.
Сначала я запускаю все соединения указанной базы данных и убиваю их.
DECLARE @SPID int = (SELECT TOP 1 SPID FROM sys.sysprocess WHERE dbid = db_id('dbName'))
While @spid Is Not Null
Begin
Execute ('Kill ' + @spid)
Select @spid = top 1 spid from master.dbo.sysprocesses
where dbid = db_id('dbName')
End
Затем я устанавливаю базу данных в режим single_user
ALTER DATABASE dbName SET SINGLE_USER
Затем я запускаю восстановление ...
RESTORE DATABASE and whatnot
Убить соединения снова
(same query as above)
И установите базу данных обратно в multi_user.
ALTER DATABASE dbName SET MULTI_USER
Таким образом, я гарантирую, что нет никаких соединений, удерживающих базу данных, до перехода в одиночный режим, так как первый будет зависать, если таковые имеются.