Sql server 2012 Upsert导致死锁

Sql server 2012 Upsert导致死锁,sql-server-2012,Sql Server 2012,我有以下存储过程: CREATE PROCEDURE [dbo].[upsert2] ( @ID varchar(20), @Status varchar(50), @Price varchar(20), @Volume varchar(20), @Currency varchar(20), @InstrumentID varchar(20), @SeqID varchar(20), @EntryDate da

我有以下存储过程:

    CREATE PROCEDURE [dbo].[upsert2] (
    @ID varchar(20),
    @Status varchar(50),
    @Price  varchar(20),
    @Volume varchar(20),
    @Currency   varchar(20),
    @InstrumentID   varchar(20),
    @SeqID  varchar(20),
    @EntryDate  datetime)
AS
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
    BEGIN TRANSACTION
    MERGE INTO Trades
USING 
    (SELECT @ID AS 'ID',@Status AS 'Status',@Price AS 'Price',@Volume AS 'Volume',@Currency AS 'Currency',@InstrumentID AS 'InstrumentID',@SeqID AS 'SeqID',@EntryDate AS 'EntryDate') AS Query
    ON Trades.ID = Query.ID AND Trades.InstrumentID = Query.InstrumentID AND Trades.SeqID = Query.SeqID
WHEN MATCHED THEN
    UPDATE SET
        Trades.Status = Query.Status,
        Trades.Price = Query.Price,
        Trades.Volume = Query.Volume,
        Trades.Span = Query.Span,
        Trades.Currency = Query.Currency,
        Trades.InstrumentID = Query.InstrumentID,
        Trades.SeqID = Query.SeqID,
        Trades.EntryDate = Query.EntryDate

WHEN NOT MATCHED THEN
        INSERT (Status,Price,Volume,Span,Currency,InstrumentID,SeqID,EntryDate) 
        VALUES (Query.Status,Query.Price,Query.Volume,Query.Span,Query.Currency,Query.InstrumentID,Query.SeqID,Query.EntryDate);
COMMIT

此过程由4个不同的进程调用,这些进程同时运行,这会导致它产生死锁并导致某些调用失败。我可以修复的过程是否有任何错误,以修复死锁,因为我不知道如何修复它。

可能重复True,它是重复的,链接上的anwers帮助,包括一个TABLOCKX解决了我所有的问题。