Биты и байты.

Биты и байты.

вторник, 2 декабря 2014 г.

Процедура запущена или нет вот в чем вопрос...


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

About