Je suis confronté à un problème étrange avec du code TSQL sur SQL2005.Mise à jour simultanée sur le même enregistrement
La pièce que nous soupçonnons génère la question est:
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 prend habituellement 500.
Il y a un index non cluster sur IdSGVdProcessInfo et IdTLogDetailStatus sur SGVdTLogDetail
Qu'est-ce qui se passe est que certains enregistrements de SGVdTLogDetail sont d'abord mis à jour avec un identifiant de la table processinfo et plus tard ils sont mis à jour à nouveau par un autre processus avec un nouvel identifiant processinfo.
Je me demande si le soupçon de tolet soulève cette question ou peut-être il y a quelque chose d'autre ...
Je suppose alors que la mise à jour est appliquée sur les 500 premières lignes sélectionnées, un autre processus consiste à sélectionner la prochaine groupe, et en prenant quelques enregistrements du premier groupe qui ne sont pas encore mis à jour (à cause du rowlock). Est-ce possible?
Toute aide sera grandement appréciée!