【发布时间】:2017-03-03 03:55:18
【问题描述】:
我有近 10 台令牌机,客户从表 Token 中获取令牌号。我正在使用存储过程来访问该表并对其进行更新
Id Name TokenFrom TokenTo LastUsedToken
----------------------------------------------------
1 Token 551 999 562
我注意到,在高峰时段,很多客户收到重复号码。也许这个问题出现了,因为有 10 个客户同时/小时/秒获得令牌。
这里是issuedToken 表
Id PosId Barcode Date Status Number isTaken
1 2 6282019214317 2016-10-20 09:41:45.020 1 366 1
2 2 6282019215918 2016-10-20 09:42:15.020 1 367 1
3 2 6282019225016 2016-10-20 09:42:45.020 1 368 1
4 3 6282019230812 2016-10-20 09:42:55.020 1 369 1
即使有时相同的号码也会出现在两台收银机上。我正在使用此 Update 语句获取和更新 POS 上的 Next Token Number
UPDATE POS
SET tNo = (SELECT TOP 1 NUMBER
FROM Tickets
WHERE STATUS = 1
AND isTaken = 1
AND PosId = (SELECT CGROUP
FROM POS
WHERE NAME='ABC'))
WHERE NAME = 'ABC'
我在一组中有 3-3 个 POS,这就是为什么选择 cGroup 而在表格中是 PosId。
我之前在这个问题中问过与这个问题相关的问题,有人帮我编写了一个存储过程来轻松访问令牌号。
但我仍然遇到重复问题。谁能告诉我避免重复的最佳方法是什么?
【问题讨论】:
-
@RyanVincent,客户正在令牌系统中输入 10 位国民身份证并获取令牌号码
-
令牌只是一个递增的数字吗? (请解释)。使用
sequence或identity(插入一条记录,然后使用scope_identity)。任何其他复杂的 MAX 或手动锁定方法只会给您带来问题。 -
@RyanVincent,顺便说一句,我在出票时也会生成一个 13 位唯一条形码
-
@Nick.McDermaid,是的,它只是增加数字。没有别的
-
我建议您使用身份或序列,但首先我必须说服为特殊目的使用特殊范围的票号是个坏主意。为什么女士需要1-50岁?如果你一天有超过 50 位女士会发生什么。无论如何,您是否链接到您的其他问题,因为那是您实现它的方式?那肯定会给你重复的令牌
标签: sql sql-server-2008 duplicates