【发布时间】:2017-10-06 11:22:12
【问题描述】:
我有一个在医院/类似机构中显示令牌队列的应用程序。它为访客颁发部门明智的令牌编号。为此,我们有下表,其中包含最后发行的令牌编号。
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 个用户)更新令牌时,它会挂起。有没有更好的更新方式?
【问题讨论】:
-
你有没有遇到过这个东西发出两个相同的令牌?如果它从未这样做,我会感到惊讶。更可靠的解决方案是使用具有标识或序列的表。
-
@Nick.McDermaid
sequence在 sql server 2012 中引入。 -
我的错误我没有阅读标签....而且我实际上不记得它是什么时候介绍的!
-
@Nick.McDermaid 不用担心。在我重新阅读问题之前,我实际上使用序列写了一个答案。
-
此外,身份方法不会为您提供医院和部门独有的序列号。但仔细想想 - 你真的需要吗?
标签: sql sql-server sql-server-2008 tsql