我试图找出这里可能存在的问题很久了。我有一个存储过程,其中有一个INSERT。许多记录都将此插入的scope_identity返回正常。但是对于少数它只返回null,因此,下一个插入失败并出现错误(因为该值在另一个表中不能为空)。
在日志中,我可以看到多个请求同时进入此存储过程(1毫秒)。
我猜我会生成ID,因为在多个请求进入的同时,我看到表中唯一标识的差距。
这可能是scope_identity()的任何问题吗?
答案 0 :(得分:1)
如果IDENTITY列上的标识值之间存在间隙,并且间隙与列的“标识增量”属性值匹配,则会在插入期间拉出自动增量值,但是,在事务完成之前出现问题在插入中,例如外键约束。一旦为下一条记录拉出下一个自动增量值,即使交易失败,它也会永远消失。您需要在插入操作期间查找错误。
答案 1 :(得分:-1)
我的Web应用程序遇到同样的问题,其中大量请求同时访问同一个表以插入记录,以防止它必须使用" SQL Transaction"因为在你的情况下你的操作执行速度太快以及执行表被锁定的插入命令。
SQL事务的使用这个有用的链接:this