日期:2014-05-18  浏览次数:20549 次

如何为许多用户维护一个唯一的数字?
如何为许多用户维护一个唯一的数字?

问题背景:二三百个终端要从SQL SERVER 得到一个整数,这个整数是从1开始,每次加1的
我希望每个终端都能得到一个和其它终端不同的号
比如A第一个要号,应得到1,B第二个要号应得到2,A再要号是3,D再要号是4等,依比类推
这有两个问题:
1,如何让SQL SERVER记往号排到几了
2,万一两个终端同时要号,是不是有必要加锁之类的,怎么实现?

------解决方案--------------------
1.如果可以的话,使用自增列.
2.或者在保存时,使用 max(col)来获取到最大的值.
------解决方案--------------------
http://technet.microsoft.com/zh-cn/library/ms190911.aspx

不知道这个是不是你想要的。 我理解的是,LZ想记录发送请求的次数。
通过计数器可以监控这个数值。

------解决方案--------------------
其实我没有听明白楼主意思
------解决方案--------------------
新建立一张表和一个存储过程GETnewID的。表专程存ID号,每getnewid叫一次加1
------解决方案--------------------
应该是TimeTamp吧。

机器号+TIMETAMP 如果不要求自动加1的话,

再偷懒就用GUID。保证任何机器都不会重复,就是长了点
------解决方案--------------------
select max(id) from tb (updlock)
update tb set id =.....

这样会保证你读的id是最新的,不会导致被其他事物修改
对这个表的锁会持续到你的事物结束再释放
------解决方案--------------------
这种情况 我建议 创建一张表

三字段
主健、表名、当前最大ID 

每次请求不管是那个机器都

update tb set 当前最大ID =当前最大ID +1
select 当前最大ID frin tb where 表名='aaaa'


这样就不会有问题了



------解决方案--------------------
探讨
而上面的回答个个都是在说如何在一个表中做到不重复(这个我其实建立个标识列就行了),但没有一个解释最关键的问题,就是让不同的客户端得到不同的数(有时两个客户端可能并发),解决并发才是关键,有人能把这个说明白么?