这需要一些解释。我所做的是在 SQL Server 2005 中创建一个特定的自定义消息队列。我有一个包含确认和完成时间戳的消息表。调用者为获取其队列中的下一条消息而执行的存储过程也会确认该消息。到现在为止还挺好。好吧,如果系统正在经历大量事务(每分钟数千次),那么在另一个存储过程的执行过程中是否有可能在另一个执行过程中确认消息,而另一个消息本身准备好这样做?让我通过在存储过程中显示我的 SQL 代码来提供帮助:
--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
...
...
在上面的代码中,不能同时运行的另一个存储过程获取相同的 id 并尝试同时确认它吗?我可以(或者我应该)实现某种锁定以防止另一个存储过程确认另一个存储过程正在查询的消息吗?
哇,这有任何意义吗?有点难以表达...