Éste tomará algunas explicaciones. Lo que he hecho es crear una cola de mensajes personalizada específica en SQL Server 2005. Tengo una tabla con mensajes que contienen marcas de tiempo tanto para confirmación como para finalización. El procedimiento almacenado que ejecutan los llamadores para obtener el siguiente mensaje en su cola también reconoce el mensaje. Hasta aquí todo bien. Bueno, si el sistema está experimentando una gran cantidad de transacciones (miles por minuto), ¿no es posible que un mensaje sea confirmado por otra ejecución del procedimiento almacenado mientras otro está preparado para hacerlo? Dejarme ayudar al mostrar mi código SQL en el procedimiento almacenado:¿Cómo se bloquean las tablas en SQL Server 2005, e incluso debería hacerlo?
--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
...
...
En el código anterior, no pudo otro procedimiento almacenado se ejecuta al mismo tiempo obtener el mismo identificador y tratar de reconocer que al mismo tiempo? ¿Podría (o debería) implementar algún tipo de bloqueo para evitar que otro proceso almacenado reconozca los mensajes que otro proceso almacenado está consultando?
Guau, ¿algo de esto tiene sentido? Es un poco difícil poner en palabras ...
es posible que desee volver a etiquetar esto para que "bestpractice" cambie a las "mejores prácticas" más comúnmente utilizadas – martinatime