注册 登录
编程论坛 VFP论坛

多人向sqlserver远程输入数据,避免id最大值重复问题

ljlbxhlc 发布于 2021-04-28 11:00, 2107 次点击
一个软件是多人同时操作一个远程sql数据表,表的id字段是序号!我用一下命令处理,但是有id重复的情况,往大侠帮助!!!
Insert into 表(id) select isnll(max(id),0)+1 from 表
多人输入id会有重复,该如何解决?
8 回复
#2
厨师王德榜2021-04-29 09:21
在服务器端,把id列设置为“自增长”字段。一般主键最好不带任何业务逻辑。
#3
radiofan2021-04-29 11:09
回复 楼主 ljlbxhlc
只有本站会员才能查看附件,请 登录
#4
ljlbxhlc2021-04-29 13:45
谢谢,各位,可是我的这个字段id生成的同时还有其他用处,
我用from 表 with (holdlock) 行不?
这样在一个人进行插入的时候其实人就不能插入了!
可是,这样的话。。第二个插入失败后会怎么样?会继续等待再次插入,
还是提示插入失败,结束呢?
#5
radiofan2021-04-29 13:57
以下是引用ljlbxhlc在2021-4-29 13:45:57的发言:

谢谢,各位,可是我的这个字段id生成的同时还有其他用处,
我用from 表 with (holdlock) 行不?
这样在一个人进行插入的时候其实人就不能插入了!
可是,这样的话。。第二个插入失败后会怎么样?会继续等待再次插入,
还是提示插入失败,结束呢?


如果一定要这样的话,就给出提示,记录正在被处理,其他人等处理完了再处理呗 !
#6
laowan0012021-04-30 08:28
自增长的字段不需要也不能赋值,可以用事务处理,保证存储的完整。
也可以先插入记录,获得插入记录的id,然后用update更新其他字段
#7
吹水佬2021-04-30 10:43
关键是各人在计算出这个ID时的同步问题,读取MAX(ID)都有可能是同一个ID
如果有读记录时自动锁处理就没问题,否则就要主动锁定/解锁记录

#8
sash2021-05-03 10:52
楼主你好,要实现你的要求,最好的办法就是使用自增量字段来解决问题。因为根据你的要求是:这个ID必须是唯一的,顺序的,这个由数据库系统自动生成和维护是最好的方法。至于这个ID还需要有其它用处,你可以等它生成后再利用。
#9
ljlbxhlc2021-05-04 15:12
回复 7楼 吹水佬
你好,您说的是我想的,可我对数据锁不太了解。。想请教。。。
Insert  into 表 (id)  select max(id)+1  from 表 with ( holdlock)
这个语句会产生什么样的效果,是不是在可以加锁。。。
如何是用不用解锁。。另外,在别人也同时用此语句插入记录时会不会插不进去呢?
请教。。。。谢谢
1