【发布时间】:2018-11-11 06:37:39
【问题描述】:
我有一个插入到表中的存储过程(其中有一个不是主键的标识列 - 最初使用日期/时间插入 PK 以生成唯一值)。
然后我们使用 SCOPEIDENTITY() 来获取插入的值,然后有一些逻辑根据这个值生成主键字段值,然后更新回表。
在某些情况下,存储过程被多个进程同时调用,导致“违反 PRIMARY KEY 约束...”错误。
这似乎表明标识列允许为多个记录插入相同的数字。
第一个问题 - 这怎么可能?
第二个问题 - 如何停止它...目前没有错误处理,所以我将添加一些 try/catch 逻辑 - 但想完全理解问题以便正确处理
【问题讨论】:
-
永远不要使用日期时间作为 PK,重复很容易获得!!!这只是时间问题,双关语!
标签: sql sql-server-2005 identity-column