Как узнать запущена ли процедура, для этого достаточно использовать встроенные блокировки  SQL Server
ALTER  PROCEDURE   usp_ProcessCustomers
AS
BEGIN
     BEGIN  TRANSACTION
     declare   @Lock int
     EXEC   @Lock = sp_getapplock @Resource = 'ProcessCustomers',
                               @LockMode =  'Exclusive'
     IF   (@Lock < 0)   -- already locked by another process
        RETURN;
-- Do processing here
-- Do processing here
     EXEC   sp_releaseapplock @Resource = 'ProcessCustomers'
     COMMIT  TRANSACTION
END
Блокировки приложений
Допустим необходимо обеспечить последовательный доступ  к запуску произвольного SQL кода. Например когда работают например несколько экземпляров приложений запускающих один и тот SQL и  мы не хотим чтобы он выполнялся параллельно.
Для таких целей  у SQL сервера есть набор процедур 
стим следующий код в 2 разных сессиях.
стим следующий код в 2 разных сессиях.
И результаты двух сессий
Как видно сообщения во второй сессии появились после того как отработала первая сессия.



