Убедитесь, что у вас нет зависимостей, таких как снимки базы данных, в БД, которую вы хотите удалить. Хотя сообщение об ошибке выглядело бы иначе. Вы уверены, что нет скрытого процесса, который подключается к вашей базе данных? Хорошим подходом было бы запустить скрипт, который убивает все сеансы и сразу же после переименования базы данных на другое имя, а затем удалить базу данных.
создать курсор на основе этого выбора:
select d.name , convert (smallint, req_spid) As spid
from master.dbo.syslockinfo l,
master.dbo.spt_values v,
master.dbo.spt_values x,
master.dbo.spt_values u,
master.dbo.sysdatabases d
where l.rsc_type = v.number
and v.type = 'LR'
and l.req_status = x.number
and x.type = 'LS'
and l.req_mode + 1 = u.number
and u.type = 'L'
and l.rsc_dbid = d.dbid
and rsc_dbid = (select top 1 dbid from
master..sysdatabases
where name like 'my_db')
проблема внутри курсора:
SET @kill_process = 'KILL ' + @spid
EXEC master.dbo.sp_executesql @kill_process
PRINT 'killed spid : '+ @spid
после того, как курсор закрыт и освобожден:
sp_dboption 'my_db', 'single user', 'TRUE'
go
sp_renamedb 'my_db', 'my_db_old'
go
DROP DATABASE MY_DB_OLD