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…