Man ir izstrādes datubāze, kas bieži tiek atkārtoti izvietota no Visual Studio datubāzes projekta (izmantojot TFS automātisko izveidi).
Dažreiz, kad es palaidu savu izveides failu, man parādās šāda kļūda:
ALTER DATABASE failed because a lock could not be placed on database 'MyDB'. Try again later.
ALTER DATABASE statement failed.
Cannot drop database "MyDB" because it is currently in use.
Es izmēģināju šo:
ALTER DATABASE MyDB SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE
bet es joprojām nevaru nomest datu bāzi. (Domāju, ka lielākajai daļai izstrādātāju ir dbo
piekļuve.)
Es varu manuāli palaist SP_WHO
un sākt iznīcināt savienojumus, bet man ir nepieciešams automātisks veids, kā to izdarīt automātiskajā izveidē. (Lai gan šoreiz mans savienojums ir vienīgais db, kuru es mēģinu atmest.)
Vai ir kāds skripts, kas var atmest manu datubāzi neatkarīgi no tā, kurš ir pieslēgts?
Atjaunināts
MS SQL Server 2012 un jaunākām versijām
USE [master];
DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), session_id) + ';'
FROM sys.dm_exec_sessions
WHERE database_id = db_id('MyDB')
EXEC(@kill);
MS SQL Server 2000, 2005, 2008
USE master;
DECLARE @kill varchar(8000); SET @kill = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), spid) + ';'
FROM master..sysprocesses
WHERE dbid = db_id('MyDB')
EXEC(@kill);
USE master
GO
ALTER DATABASE database_name
SET OFFLINE WITH ROLLBACK IMMEDIATE
GO
Atsauce: http://msdn.microsoft.com/en-us/library/bb522682%28v=sql.105%29.aspx
Skriptu, ko nodrošina SSMS, varat iegūt, veicot šādu darbību:
Skripts izskatīsies apmēram šādi:
USE [master]
GO
ALTER DATABASE [YourDatabaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
USE [master]
GO
DROP DATABASE [YourDatabaseName]
GO