CREATE PROCEDURE  usp_sys_killallprocesses ASDECLARE @SPID INT,
@SQL VARCHAR(20)DECLARE CURSOR_BLOCKED CURSOR LOCAL
FOR
SELECT SPID FROM MASTER..SYSPROCESSES WITH(NOLOCK) WHERE SPID <> @@spid  --不杀掉自己OPEN CURSOR_BLOCKEDFETCH CURSOR_BLOCKED INTO @SPIDWHILE @@FETCH_STATUS = 0
BEGIN
IF @SPID > 50 --非系统进程
BEGIN
SET @SQL = 'KILL ' + CONVERT(VARCHAR(10),@SPID)
EXECUTE( @SQL )
END

FETCH CURSOR_BLOCKED INTO @SPID
ENDCLOSE CURSOR_BLOCKED
DEALLOCATE CURSOR_BLOCKED
GO

解决方案 »

  1.   

    gahade:
    我是要删除一个数据库的进程,不是删所有。
    我将你的proc改造了一下,加了一个数据库名称变量,该存储过程可以放在master库中。
    再次谢谢你---------------------------------------------------------CREATE PROCEDURE usp_sys_killallprocesses 
    @db varchar(30)  ---要删除进程的数据库名称
    ASDECLARE @SPID INT,
    @SQL VARCHAR(20)DECLARE CURSOR_BLOCKED CURSOR LOCAL
    FOR
    SELECT SPID FROM MASTER..SYSPROCESSES WITH(NOLOCK) WHERE DB_NAME(DBID)=@db and SPID <> @@spid --不杀掉自己OPEN CURSOR_BLOCKEDFETCH CURSOR_BLOCKED INTO @SPIDWHILE @@FETCH_STATUS = 0
    BEGIN
    IF @SPID > 50 --非系统进程
    BEGIN
    SET @SQL = 'KILL ' + CONVERT(VARCHAR(10),@SPID)
    EXECUTE( @SQL )ENDFETCH CURSOR_BLOCKED INTO @SPID
    ENDCLOSE CURSOR_BLOCKED
    DEALLOCATE CURSOR_BLOCKED
    GO