ตรวจสอบให้แน่ใจว่าคุณไม่มีการพึ่งพาเช่นสแน็ปช็อตฐานข้อมูลบน 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