0

基本上我有一个包含分层数据的表。

所以我有一个 id 列和一个汇总列,它指向每个孩子的父母的 id 列。

该表是使用 TableAdapter 上的 GetData() 从数据库加载的,然后使用以下方法设置表的主键自动增量:

选择 IDENT_CURRENT('TableName') + 1

在层次结构中创建新的孩子,然后我在同一个 TableAdapter 上调用 Update()。

大多数情况下,这工作得很好,但偶尔我会得到 ContraintException 列“id”被限制为唯一问题,并且它似乎只在添加新行时发​​生。

通常,我只需将 autoincrementseed 和 autoincrementstep 设置为 -1 并在更新 id 列后从数据库中获取正确的值,但是因为汇总列取决于主键值,所以这将不起作用。

我也不能实时应用每个新行,因为所有更改作为一个整体必须由用户在应用到数据库之前进行审查。

有任何想法吗?

编辑:我应该提一下,没有其他任何更改从任何其他来源进入此表,因此这里没有并发问题。

另一个编辑:今天我在调用更新方法之前检查了表中的值,并注意到问题与未在主键上正确排序的新行有关。

因此,例如行去了,960,961,963,962,当插入 962 时,我得到了 962 已经存在的错误。如果更新按顺序插入行,就不会发生这种情况。

为什么表会按主键不按顺序索引行?

4

1 回答 1

0

除非你只有一个用户,否则使用 SELECT IDENT_CURRENT('TableName') + 1 会杀了你

于 2010-08-17T16:28:27.463 回答