标题:多人向sqlserver远程输入数据,避免id最大值重复问题
只看楼主
ljlbxhlc
Rank: 2
等 级:论坛游民
帖 子:124
专家分:20
注 册:2013-9-24
结帖率:25.71%
已结贴  问题点数:10 回复次数:8 
多人向sqlserver远程输入数据,避免id最大值重复问题
一个软件是多人同时操作一个远程sql数据表,表的id字段是序号!我用一下命令处理,但是有id重复的情况,往大侠帮助!!!
Insert into 表(id) select isnll(max(id),0)+1 from 表
多人输入id会有重复,该如何解决?
搜索更多相关主题的帖子: 远程 sqlserver 输入 重复 最大值 
2021-04-28 11:00
厨师王德榜
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:183
帖 子:942
专家分:4724
注 册:2013-2-16
得分:2 
在服务器端,把id列设置为“自增长”字段。一般主键最好不带任何业务逻辑。
2021-04-29 09:21
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
得分:2 
回复 楼主 ljlbxhlc
2021-04-29 11:09
ljlbxhlc
Rank: 2
等 级:论坛游民
帖 子:124
专家分:20
注 册:2013-9-24
得分:0 
谢谢,各位,可是我的这个字段id生成的同时还有其他用处,
我用from 表 with (holdlock) 行不?
这样在一个人进行插入的时候其实人就不能插入了!
可是,这样的话。。第二个插入失败后会怎么样?会继续等待再次插入,
还是提示插入失败,结束呢?
2021-04-29 13:45
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
得分:0 
以下是引用ljlbxhlc在2021-4-29 13:45:57的发言:

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


如果一定要这样的话,就给出提示,记录正在被处理,其他人等处理完了再处理呗 !
2021-04-29 13:57
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:2 
自增长的字段不需要也不能赋值,可以用事务处理,保证存储的完整。
也可以先插入记录,获得插入记录的id,然后用update更新其他字段
2021-04-30 08:28
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:2 
关键是各人在计算出这个ID时的同步问题,读取MAX(ID)都有可能是同一个ID
如果有读记录时自动锁处理就没问题,否则就要主动锁定/解锁记录

2021-04-30 10:43
sash
Rank: 4
等 级:业余侠客
威 望:6
帖 子:63
专家分:245
注 册:2014-4-25
得分:2 
楼主你好,要实现你的要求,最好的办法就是使用自增量字段来解决问题。因为根据你的要求是:这个ID必须是唯一的,顺序的,这个由数据库系统自动生成和维护是最好的方法。至于这个ID还需要有其它用处,你可以等它生成后再利用。
2021-05-03 10:52
ljlbxhlc
Rank: 2
等 级:论坛游民
帖 子:124
专家分:20
注 册:2013-9-24
得分:0 
回复 7楼 吹水佬
你好,您说的是我想的,可我对数据锁不太了解。。想请教。。。
Insert  into 表 (id)  select max(id)+1  from 表 with ( holdlock)
这个语句会产生什么样的效果,是不是在可以加锁。。。
如何是用不用解锁。。另外,在别人也同时用此语句插入记录时会不会插不进去呢?
请教。。。。谢谢
2021-05-04 15:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-505601-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.712010 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved