Moje rozwiązanie, to przestawić bazę w tryb SINGLE USER kończąc natychmiast wszystkie otwarte transakcje:
ALTER DATABASE AdventureWorks SET SINGLE_USER WITH ROLLBACK IMMEDIATE
a potem przełączyć bazę w tryb MULTI_USER:
ALTER DATABASE AdventureWorks SET MULTI_USER
Rozwiązanie z http://www.sqlservercentral.com/articles/Backup+%2f+Restore/71272/
Uruchom skrypt:
DECLARE @execSql varchar(1000) DECLARE @databaseName varchar(100) — Set the database name for which to kill the connections SET @databaseName = 'Adventureworks’ SET @execSql =” SELECT @execSql = @execSql + 'kill ’ + CONVERT(CHAR(10), spid) + ’ ’ from master.dbo.sysprocesses WHERE db_name(dbid) = @databaseName AND status <> 'background’ AND status IN (’runnable’,’sleeping’) AND DBID <> 0 AND spid <> @@spid print @execsql EXEC (@execSql)Skrypt odnajduje niesystemowe sesje pracujące w danej bazie danych (oprócz potencjalnie naszej sesji) i konstruuje polecenie kill zabijające te sesje. Sprytne…