SQL Сервер: транзакция была заблокирована на ресурсах блокировки с другим процессом и была выбрана в качестве жертвы тупика. Перезапустите транзакцию - PullRequest
0 голосов
/ 18 марта 2020

Параллельное выполнение хранимой процедуры вызывает вышеуказанную ошибку. Хранимая процедура содержит операторы Update и Insert. Во время выполнения хранимой процедуры мы получаем ошибку

Транзакция была заблокирована для ресурсов блокировки другого процесса и была выбрана в качестве жертвы тупика. Перезапустите транзакцию.

Как я могу запустить хранимую процедуру параллельно в отдельных потоках и избежать тупика?

IF NOT EXISTS (SELECT *
               FROM [sys].[table_types]
               WHERE user_type_id = Type_id(N'[dbo].[ClassTableType]'))
BEGIN
    CREATE TYPE [dbo].[ClassTableType] AS TABLE (DisplayName NVARCHAR(256));
END
GO

CREATE PROCEDURE [dbo].[usp_CreateUpdateClasses] 
    (@ClassTVPList ClassTableType READONLY)
AS 
    UPDATE t1
    SET DisplayName = t2.DisplayName
    FROM TargetTable t1
    INNER JOIN @ClassTVPList t2 ON t1.ColumnId = t2.ColumnId 
                                AND t1.TenantId = t2.TenantId

    IF @@ROWCOUNT = 0
        INSERT INTO TargetTable (DisplayName)
            SELECT * FROM @ClassTVPList;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...