sql-server – 如何在SQL Server 2005中锁定表,我该怎么办?

前端之家收集整理的这篇文章主要介绍了sql-server – 如何在SQL Server 2005中锁定表,我该怎么办?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这一个将会解释一下.我所做的是在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,并尝试同时确认它?我可以(或应该)实现某种锁定,以防止另一个存储过程确认另一个存储过程正在查询的消息?

哇,有没有这个有意义?说出来有点难

解决方法

这样的东西
--Grab the next message id
begin tran
declare @MessageId uniqueidentifier
select top 1 @MessageId =   ActionMessageId from UnacknowledgedDemands with(holdlock,updlock);

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

-- some error checking
commit tran

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

猜你在找的MsSQL相关文章