Переконайтеся, що у вас немає залежностей, таких як знімки бази даних на db, який ви хочете видалити. Хоча повідомлення про помилку виглядало б інакше. Ви впевнені, що не існує прихованого процесу, який підключається до вашої бази даних? Хорошим підходом було б запуск сценарію, який вбиває всі сеанси та одразу після перейменування бази даних на інше ім'я, а потім скидання бази даних.
створити курсор на основі цього вибору:
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