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解决了我所有的问题。