我在SQL2005上遇到了一些TSQL代碼的奇怪問題。在同一記錄上同時更新
我們懷疑這件作品產生的問題是:
INSERT INTO SGVdProcessInfo
([StartTs])
VALUES
(GETDATE())
SELECT @IdProcessInfo = SCOPE_IDENTITY()
UPDATE TOP(@quantity)
[SGVdTLogDetail] WITH (ROWLOCK)
SET
[IdSGVdProcessInfo] = @IdProcessInfo
WHERE
[IdSGVdProcessInfo] IS NULL
and IdTLogDetailStatus != 9
@Quantity通常需要500
有上SGVdTLogDetail
一個非聚集索引超過IdSGVdProcessInfo和IdTLogDetailStatus發生了什麼事是SGVdTLogDetail的一些記錄首先使用processinfo表的一個id更新,然後它們再次由另一個具有新的processinfo ID的進程更新。
如果ROWLOCK提示時提出這一問題,或許還有別的我不知道......
我的猜測是,當施加在第一選擇500行中的更新,另一個進程正在選擇下一個組,並記錄第一組尚未更新的記錄(由於行鎖)。這可能嗎?
任何幫助將不勝感激!