Как узнать запущена ли процедура, для этого достаточно использовать встроенные блокировки 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 сервера есть набор процедур sp_getapplock (устанавливает блокировку) и sp_releaseapplock (снимает блокировку)
стим следующий код в 2 разных сессиях.
стим следующий код в 2 разных сессиях.
И результаты двух сессий
Как видно сообщения во второй сессии появились после того как отработала первая сессия.