Verifique se você não possui dependências, como instantâneos de banco de dados no banco de dados que deseja remover. Porém, a mensagem de erro pareceria diferente. Você tem certeza de que não há nenhum processo oculto que está se conectando ao seu banco de dados? Uma boa abordagem seria executar um script que mata todas as sessões e imediatamente após renomear o banco de dados para outro nome e, em seguida, descartá-lo.
crie um cursor com base nessa seleção:
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')
problema dentro do cursor:
SET @kill_process = 'KILL ' + @spid
EXEC master.dbo.sp_executesql @kill_process
PRINT 'killed spid : '+ @spid
após o cursor ser fechado e desalocado:
sp_dboption 'my_db', 'single user', 'TRUE'
go
sp_renamedb 'my_db', 'my_db_old'
go
DROP DATABASE MY_DB_OLD