如何使自动取号时不发生重复 在sql server中建立一个表储存一个最大值,当用户取号时锁定表最大值,然后在将最大值加一回存,解除表锁定,这样就不会取出重复的号。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 首先需要写在事务中update table set maxid = maxid + 1 where ....select maxid from table where ....这样,每次获取就不会重复了,当然,如果你的业务没有发生成功 ,maxid还是增加了,问题不大的。 假如数据表里的纪录已用:000000,000001,000002,000004那么,用户A取号时取得 000005,但在执行往占用号码的数据表里插入数据前用户B也取号呢?这样不也取了 000005 吗? 一个不太好的解决方案:用户A取号时取得 000005后,添加 一条新的空记录,添加完成后再更新;如果取消添加,则删除新加的记录。 CREATE procedure pCreateMenuString @TableName varchar(50),@fieldname varchar(50)as exec('select isnull((select max(convert(int,right('+@fieldname+',4))) from '+@TableName+'),0)+1 as a') IDENTITY ? 能详细说说吗? 我们这些号码具有人为赋予的意义,不能自动的 TAB引发重绘事件的问题 PB调用C# Windows窗体的问题 winform中datagridview动态添加行,等等 socket问题,求解 vs2010缺少图片无法发布 几句代码看不懂?望有空的高手帮忙看看 在线等。。。 关于多选的问题。。。。。。。。 InstallShield X Express 怎么才能制作中文的安装程序? 求winform窗体四边阴影的方法 传参数中数据类型转换的错误! 高手进来,Excel到xml格式转换的问题。 怎么C#中没有画线和画矩形的控件?
update table set maxid = maxid + 1 where ....
select maxid from table where ....
这样,每次获取就不会重复了,当然,如果你的业务没有发生成功 ,maxid还是增加了,问题不大的。
那么,用户A取号时取得 000005,但在执行往占用号码的数据表里插入数据前用户B也取号呢?这样不也取了 000005 吗?
一个不太好的解决方案:用户A取号时取得 000005后,添加 一条新的空记录,添加完成后再更新;如果取消添加,则删除新加的记录。
as
exec('select isnull((select max(convert(int,right('+@fieldname+',4))) from '+@TableName+'),0)+1 as a')
我们这些号码具有人为赋予的意义,不能自动的