[英]Identity column SQL Server 2005 inserting same value twice
我有一个插入到表中的存储过程(其中有一个标识列不是主键-最初使用日期/时间插入PK以生成唯一值)。
然后,我们使用SCOPEIDENTITY()获取插入的值,然后有一些逻辑根据该值生成主键字段值,然后将其更新回到表中。
在某些情况下,多个过程同时调用存储过程,从而导致“违反PRIMARY KEY约束...”错误。
这似乎表明标识列允许为多个记录插入相同的数字。
第一个问题-这怎么可能?
第二个问题-如何停止它...目前尚无错误处理,因此我将添加一些try / catch逻辑-但想充分理解该问题以正确处理
仔细查看错误消息:
违反主键约束...
鉴于你说的:
那里有一个不是主键的标识列-最初使用日期/时间插入PK以生成唯一值
在我看来,问题与身份列无关,因为它不是主键,但日期/时间方法很可能不会生成唯一值,并且在您尝试插入时失败。
您是否由于某些原因而不仅仅是使用标识列作为主键?
我认为,您应该改用IDENT_CURRENT('tablename') 。
SCOPE_IDENTITY() ,将返回在当前会话中创建的最后一个标识值。
IDENT_CURRENT不受范围和会话的限制; 它仅限于指定的表。
在这里您可以阅读有关您的问题的信息
另一篇关于并行性的有用文章
https://sqlblog.org/2009/03/21/six-reasons-you-should-be-nervous-about-parallelism
祝好运!
最初使用日期/时间插入PK以生成唯一值
您确定是导致问题的身份吗? 如果插入当前日期/时间值作为PK的初始值,并且它同时由2个不同的线程/进程同时执行,则可能会获得相同的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.