Comment verrouiller des tables dans SQL Server 2005, et même si je dois le faire?

Celui-ci va prendre un peu difficile à expliquer. Ce que j'ai fait est de créer un message personnalisé de la file d'attente dans SQL Server 2005. J'ai une table avec des messages qui contiennent des horodateurs pour les deux accusé de réception et d'achèvement. La procédure stockée que les appelants exécuter pour obtenir le message suivant dans la file d'attente reconnaît également le message. So far So good. Eh bien, si le système est confronté à une quantité massive de transactions (en milliers par minute), n'est-il pas possible qu'un message pour être reconnu par l'autre à l'exécution de la procédure stockée pendant que l'autre est prêt à donc lui-même? Permettez-moi de les aider en montrant mon code SQL dans la procédure stockée:

--Grab the next message id
declare @MessageId uniqueidentifier
set @MessageId = (select top(1) ActionMessageId from UnacknowledgedDemands);

--Acknowledge the message
update ActionMessages
set AcknowledgedTime = getdate()
where ActionMessageId = @MessageId

--Select the entire message
...
...

Dans le code ci-dessus, ne pouvait pas une autre procédure stockée en cours d'exécution dans le même temps obtenir le même id et tenter de le reconnaître en même temps? Pourrais-je (ou devrais-je) de mettre en œuvre une sorte de verrouillage pour empêcher une autre procédure stockée à partir de reconnaître les messages d'une autre procédure stockée est l'interrogation?

Wow, n'a tout de même un sens? C'est un peu difficile à mettre en mots...

vous avez peut-être re-tag-ce donc que "bestpractice" modifications les plus couramment utilisées "les meilleures pratiques"

OriginalL'auteur Kilhoffer | 2008-09-11