Déconnecter tous les utilisateurs d'une base

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'

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Related posts

Add comment


(Will show your Gravatar icon)  

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



Live preview

November 21. 2008 11:47