同时更新时,表被锁定



我有一个用于医院/类似机构的显示令牌队列的应用程序。它向访客提供了部门的明智令牌数字。为此,我们有下表,其中最后一个发行的令牌no。

HospId  Int Not Null
DeptId  Int Not Null
TokenId Int Not Null /* current token number */

发出令牌时,我执行以下更新语句

Update <table> Set TokenId = (Select Max(TokenId) + 1 From <table>)
Where HospId = @HospId And DeptId = @DeptID

这很好,但是当有更多并发用户(超过200个用户(更新令牌时,它就会被挂起。是否有更好的方法来更新?

如果您不能使用自动增量数字,则可能在存储过程中使用代币生成代码,而在存储过程中使用SET TRANSACTION ISOLATION LEVEL SERIALIZABLE是可行的选项。

它会有所减慢,但应防止并发问题。

存储过程的原因是,通过将直接写入权禁用给您的应用程序用户,并仅通过EXECUTE AS OWNER(MSDN(将其允许到存储过程中,您可以保证不会有有趣的事情和Rogue代码在您的令牌一代中戳孔。

相关内容

  • 没有找到相关文章

最新更新