Avez-vous essayé de détacher une base sur laquelle il reste des sessions ouvertes ? Sous SQL Server 2000 on avait la possibilité de fermer les sessions. Maintenant (sous SQL Server 2005) il faut aller dans le moniteur et les tuer un par un. Comme je suis un gros flemmard, je me suis écrit une petite procédure stockées pour faire le travail toute seule.
Avez-vous essayé de détacher une base sur laquelle il reste des sessions ouvertes ? Sous SQL Server 2000 on avait la possibilité de fermer les sessions. Maintenant (sous SQL Server 2005) il faut aller dans le moniteur et les tuer un par un. Comme je suis un gros flemmard, je me suis écrit une petite procédure stockées pour faire le travail toute seule.
use Master
go
if exists(select 1 from sysobjects where type='P' and name='KillAll')
drop procedure KillAll
go
>?xml:namespace prefix =" ""o" /?<
create procedure KillAll(@DatabaseName varchar(100))
as begin
declare @pid int
declare Processes cursor LOCAL FORWARD_ONLY READ_ONLY FAST_FORWARD for
select spid from sys.sysprocesses p
inner join sys.sysdatabases d on d.dbid=p.dbid
where d.name=@DatabaseName
-- loop ...
open Processes
FETCH NEXT FROM Processes INTO @pid
WHILE @@FETCH_STATUS = 0
begin
if @@spid <> @pid
begin
-- ... and kill
declare @killStmt nvarchar(100)
set @KillStmt = N'KILL '+cast(@pid as nvarchar);
exec sp_executesql @KillStmt
end
FETCH NEXT FROM Processes INTO @pid
end
close Processes
deallocate Processes
end
go
exec KillAll 'Northwind'