我正在寻找适当的方法,以防止锁死的问题被多个进程试图更新表相同的记录造成的。我已经能够通过首先选择记录WITH (UPDLOCK)
然后进行更新来防止死锁。但是,我不确定这是否会一直工作,或者当其他进程插入新记录或更新此表中的其他记录时,它会导致其他阻塞问题。SQL服务器死锁问题
CREATE PROCEDURE usp_ReduceOrderAmount
@OrderId INT,
@ReductionAmount INT
AS
BEGIN
SET NOCOUNT ON
DECLARE @dDateTime AS DATETIME
SET @dDateTime = GETUTCDATE()
BEGIN TRANSACTION
--Quick Fix... Attempt to block other callers who are trying to update the same record.
SELECT * FROM ORDERS WITH (UPDLOCK) WHERE ORDER_ID = @OrderId
UPDATE dbo.ORDERS
SET QTY_OPEN = QTY_OPEN - @ReductionAmount,
UPDATED_WHEN = @dDateTime
WHERE ORDER_ID = @OrderId
COMMIT
END
死锁通常涉及至少2个资源(表)。你有错误消息/场景? – davmos 2013-05-09 17:31:36
你为什么选择进入交易?为什么你不在交易之外? – 2013-05-09 17:38:09
您还可以使用(updlock)添加更新命令 – Jimbo 2013-05-09 17:38:22