TSQL to kill all processes of a database except your own process

To kill all the active processes of a database except your own process execute the below query after providing the database name in parameter (@DBName). It provides you the Kill statements with SPID's in result set, Now copy and paste the result set in new window and execute that statements, it will kill all processes of a database except yours.

SQL CODE:

IF OBJECT_ID('TEMPDB..#SP_WHO') IS NOT NULL
    DROP TABLE #SP_WHO;

IF OBJECT_ID('TEMPDB..#ProcessToKill') IS NOT NULL
    DROP TABLE #ProcessToKill;

DECLARE @DBName NVARCHAR(150);
SET @DBName = 'YourDatabaseName';

CREATE TABLE #SP_WHO
    (
      IDX INT IDENTITY(1, 1) ,
      SpID INT ,
      ECID INT ,
      STATUS VARCHAR(50) ,
      LOGINNAME VARCHAR(100) ,
      HOSTNAME VARCHAR(100) ,
      BLK INT ,
      DBNAME VARCHAR(150) ,
      CND VARCHAR(150) ,
      REQUEST_ID BIT
    );
INSERT  INTO #SP_WHO
        ( SpID ,
          ECID ,
          STATUS ,
          LOGINNAME ,
          HOSTNAME ,
          BLK ,
          DBNAME ,
          CND ,
          REQUEST_ID
        )
        EXEC sp_who;

CREATE TABLE #ProcessToKill
    (
      Statements VARCHAR(100)
    );


DECLARE @start INT= 1;
DECLARE @End INT;
SET @End = ( SELECT MAX(IDX)
             FROM   #SP_WHO
           );
WHILE @start <= @End
    BEGIN

        INSERT  INTO #ProcessToKill
                ( Statements
                )
                SELECT  'Kill ' + CAST(SpID AS VARCHAR(50))
                FROM    #SP_WHO
                WHERE   DBNAME = @DBName
                        AND SpID <> @@SPID
                        AND IDX = @start;

        SET @start = @start + 1;

    END;

SELECT  *

FROM    #ProcessToKill;

Comments

  1. To kill directly all processes of a database except your own process using cursor
    query is:

    IF OBJECT_ID('TEMPDB..#SP_WHO') IS NOT NULL
    DROP TABLE #SP_WHO;


    DECLARE @DBName NVARCHAR(150);
    SET @DBName = 'YourDatabaseName';

    DECLARE @sql NVARCHAR(500);

    CREATE TABLE #SP_WHO
    (
    IDX INT IDENTITY(1, 1) ,
    SpID INT ,
    ECID INT ,
    STATUS VARCHAR(50) ,
    LOGINNAME VARCHAR(100) ,
    HOSTNAME VARCHAR(100) ,
    BLK INT ,
    DBNAME VARCHAR(150) ,
    CND VARCHAR(150) ,
    REQUEST_ID BIT
    );
    INSERT INTO #SP_WHO
    ( SpID ,
    ECID ,
    STATUS ,
    LOGINNAME ,
    HOSTNAME ,
    BLK ,
    DBNAME ,
    CND ,
    REQUEST_ID
    )
    EXEC sp_who;

    DECLARE @ID INT;
    DECLARE SpWho_cursor CURSOR
    FOR
    SELECT IDX
    FROM #SP_WHO
    WHERE DBNAME = @DBName
    AND SpID <> @@SPID;

    OPEN SpWho_cursor;
    FETCH NEXT FROM SpWho_cursor INTO @ID;

    WHILE @@FETCH_STATUS = 0
    BEGIN
    SET @sql = ( SELECT 'Kill ' + CAST(SpID AS VARCHAR(50))
    FROM #SP_WHO
    WHERE IDX = @ID
    AND DBNAME = @DBName
    AND SpID <> @@SPID
    );
    EXECUTE sp_executesql @sql;

    FETCH NEXT FROM SpWho_cursor INTO @ID;
    END;

    CLOSE SpWho_cursor;
    DEALLOCATE SpWho_cursor;

    ReplyDelete

Post a Comment

Popular posts from this blog

TSQL To Get All the Names of tables and Databases whose data have changed in last 24 Hours

To Get All the Names of tables and Databases their data have changed in last 24 Hours And Backup those databases

Apply paging in procedure