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로 다른 프로세스에 의해 다시 업데이트된다는 것입니다. 노 걸이 힌트가이 문제를 제기하거나 아니면 다른 뭔가가 있다면 제가 궁금하네요
... 업데이트가 처음 500 선택한 행에 걸쳐 적용되는 동안
이내 생각은, 다른 프로세스가 다음을 선택이다 그룹 및 아직 업데이트되지 않은 첫 번째 그룹의 일부 레코드를 가져 오는 것 (행 잠금으로 인해). 이것이 가능한가?
도움이 될 것입니다.