Параллельное выполнение хранимой процедуры вызывает вышеуказанную ошибку. Хранимая процедура содержит операторы 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;