В основном вы хотите уничтожить все соединения. Вы можете использовать что-то вроде этого:
Для MS SQL Server 2012 и выше
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);
Или что-то более похожее на сценарий:
DECLARE @pid SMALLINT, @sql NVARCHAR(100)
DECLARE curs CURSOR LOCAL FORWARD_ONLY FOR
SELECT DISTINCT pid FROM master..sysprocesses where dbid = DB_ID(@dbname)
OPEN curs
fetch next from curs into @pid
while @@FETCH_STATUS = 0
BEGIN
SET @sql = 'KILL ' + CONVERT(VARCHAR, @pid)
EXEC(@sql)
FETCH NEXT FROM curs into @pid
END
CLOSE curs
DEALLOCATE curs
Больше можно найти здесь: Скрипт для уничтожения всех соединений с базой данных (больше, чем RESTRICTED_USER ROLLBACK)