【发布时间】:2015-05-05 15:38:57
【问题描述】:
当以下代码几乎同时被调用两次时,我遇到了麻烦。
DECLARE @membershipIdReturn as uniqueidentifier=null
SELECT @membershipIdReturn = MembershipId
FROM [Loyalty].[Membership]
WITH (NOLOCK)
WHERE ContactId = @customerIdFront
AND
IsDeleted = 0
IF (@membershipIdReturn IS NULL)
//InsertStatementHere
调用非常接近(大约千分之三秒),以至于第二个调用也进入了 if 语句。然后解除单一性失败,因为这不应该发生。
这个错误是因为(NOLOCK)吗?我需要它来处理交易问题。
是否有任何解决方法可以纠正这种行为?
谢谢艾尔
【问题讨论】:
-
为了清楚起见,您是说 [[[SELECT MembershipId FROM [Loyalty].[Membership] WITH (NOLOCK) WHERE ContactId = @customerIdFront AND IsDeleted = 0]]] 不为 NULL,但是在运行后您的 IF 语句 eval 为 true?
-
两个语句几乎同时运行。对于正常行为,只有第一次运行应该有效 if 语句,第二次不应该是真的,因为第一次运行已经完成了。但是由于调用彼此如此接近,因此两者都运行进入 if 语句。谢谢,艾尔
标签: sql-server sql-server-2012 sql-insert