CREATE PROCEDURE [quest].[UserQuests_Delete]
(
@UserId INT,
@QuestId INT
)
AS
BEGIN
SET NOCOUNT ON
DELETE FROM
quest.UserQuests
WHERE
UserId=@UserId AND
QuestId= @QuestId AND
UserQuestState=2 AND
UserQuestId<>(SELECT TOP 1 UserQuestId FROM quest.UserQuests WHERE UserId=@UserId AND QuestId= @QuestId AND UserQuestState=2 ORDER BY CreateDateUTC DESC)
DELETE FROM quest.UserQuests WHERE UserQuestState=3
END
SELECT TOP 1 UserQuestId FROM quest.UserQuests
修改为:
SELECT TOP 1 UserQuestId FROM quest.UserQuests with(nolock)你的存储过程如果并发执行,可能会相互产生阻塞,可以简单这么修改降低死锁发生率,如果还出现,那么应该就是存储过程和其他语句之间发生自锁了。