IF EXISTS ( SELECT * 
            FROM   sysobjects 
            WHERE  id = object_id(N'CP_MatarProcesosBloqueados') 
                   and OBJECTPROPERTY(id, N'IsProcedure') = 1 )
BEGIN
    DROP PROCEDURE [CP_MatarProcesosBloqueados]
END
GO

CREATE PROCEDURE [dbo].[CP_MatarProcesosBloqueados] @pBaseDatos VARCHAR(255) = NULL
AS 
SET NOCOUNT ON

DECLARE @SqlStr		NVARCHAR(4000)
DECLARE @SpId		INTEGER
DECLARE @SP_Who_Rta TABLE	(SpId		INT,
							Ecid		INT,
							Status		VARCHAR(200),
							LoginName	VARCHAR(255),
							HostName	VARCHAR(255),
							Blk			INT,
							DbName		VARCHAR(255),
							Cmd			VARCHAR(8000),
							Request_Id	INT)

INSERT INTO @SP_Who_Rta
EXEC sp_who

IF(@pBaseDatos IS NULL)
BEGIN
	--Para Todas las Bases de Datos
	DECLARE curCP_MatarProcesosBloqueados CURSOR FOR
	SELECT ISNULL(SpId, 0) 
	FROM @SP_Who_Rta 
	WHERE
	ISNULL(Blk, 0) <> 0 
	AND ISNULL(HostName, '') <> ''

	OPEN curCP_MatarProcesosBloqueados
	FETCH NEXT FROM curCP_MatarProcesosBloqueados INTO @SpId
	WHILE @@FETCH_STATUS = 0
	BEGIN

		SET @SqlStr = 'KILL ' + CAST(@SpId AS VARCHAR(10))
		EXEC (@SqlStr)

		FETCH NEXT FROM curCP_MatarProcesosBloqueados INTO @SpId
	END
	CLOSE curCP_MatarProcesosBloqueados
	DEALLOCATE curCP_MatarProcesosBloqueados
END
ELSE
BEGIN
	--SOLO para la Bases de Datos enviada en el parametro
	DECLARE curCP_MatarProcesosBloqueados CURSOR FOR
	SELECT ISNULL(SpId, 0) 
	FROM @SP_Who_Rta 
	WHERE
	ISNULL(Blk, 0) <> 0 
	AND ISNULL(HostName, '') <> ''
	AND ISNULL(DbName, '') = @pBaseDatos

	OPEN curCP_MatarProcesosBloqueados
	FETCH NEXT FROM curCP_MatarProcesosBloqueados INTO @SpId
	WHILE @@FETCH_STATUS = 0
	BEGIN

		SET @SqlStr = 'KILL ' + CAST(@SpId AS VARCHAR(10))
		EXEC (@SqlStr)

		FETCH NEXT FROM curCP_MatarProcesosBloqueados INTO @SpId
	END
	CLOSE curCP_MatarProcesosBloqueados
	DEALLOCATE curCP_MatarProcesosBloqueados
END

/*
EXEC dbo.CP_MatarProcesosBloqueados
EXEC dbo.CP_MatarProcesosBloqueados   'LHADM_Clever_Admin'
*/