当前位置:  开发笔记 > 数据库 > 正文

你如何锁定SQL Server 2005中的表,我应该怎么做?

如何解决《你如何锁定SQLServer2005中的表,我应该怎么做?》经验,为你挑选了1个好方法。

这个将需要一些解释.我所做的是在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并尝试同时确认它?我(或我应该)可以实现某种锁定以防止另一个存储过程确认另一个存储过程正在查询的消息吗?

哇,这有甚么有意义吗?说文字有点困难......



1> SQLMenace..:

像这样的东西

--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
...
...

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有