我相信我使用HOLDLOCK
不正确。
我认为这是因为我有一个像队列一样的表。队列从下面的 SQL 接收其项目并在控制台应用程序中一一进行处理。我还没有测试过,但我相信当这个控制台应用程序开始处理这个表时,在一些长选择期间,下面的代码会失败。为什么我会这样认为...因为我在从表队列中获取所有内容并在该控制台应用程序中一一处理它们时记录了 GameID。有趣的是,我认为没有通过的游戏没有在日志中出现,因此我不相信它们会被插入到我的队列表中,我相信这是因为HOLDLOCK
以下原因。
想法?
MERGE Test WITH (HOLDLOCK) AS GL
USING (SELECT @GameId AS ID) AS NewTest ON GL.ID = NewTest.ID
WHEN NOT MATCHED THEN
INSERT
(
Id,
FailedAttempts,
DateCreated
)
VALUES
(
NewTest.ID,
0,
SYSDATETIME()
);