Dans MS SQL Server, est-il un moyen de “atomiquement” incrémenter une colonne qui est utilisé comme un compteur?

En supposant un Read committed d'isolation de transaction, c'est la déclaration suivante "atomique" dans le sens que vous ne jamais "perdre" un concurrent à l'incrément?

update mytable set counter = counter + 1

Je suppose que dans le cas général, où cette instruction de mise à jour fait partie d'une opération plus vaste, qu'il ne serait pas. Par exemple, je pense que ce scénario est possible:

  • mise à jour le compteur de transaction n ° 1
  • faire quelques autres trucs
    dans la transaction #1
  • mise à jour le compteur
    avec l'opération #2
  • commettre
    opération n ° 2
  • commit transaction n ° 1

Dans cette situation, ne serait pas le compteur de fin seulement être incrémenté de 1? Fait-il une différence si c'est la seule instruction dans une transaction?

Comment un site comme stackoverflow en occupera pour sa question, compteur de vue? Ou est la possibilité de "perdre" quelques incréments juste considéré comme acceptable?

InformationsquelleAutor Dan P | 2008-10-10