2

我设置了下表:

  • Id intpk,唯一不为空
  • Name varchar(50)不为空
  • 与此问题无关的其他列

将索引设置Name为唯一且非聚集的。

该设置完全符合我的要求 - 也就是说,只插入Name表中不存在的新行,如果新行是重复的,则抛出错误Name

我可能对此很挑剔,但每次添加重复项的尝试都会导致 SQL Server 跳过本Id应分配的下一个,如果新行是 non-duplicate 的话Name

有没有办法通过一些设置来防止这种情况,而无需在决定插入或拒绝之前先查询存在?

4

1 回答 1

2

不,没有设置可以防止标识值在插入失败时增加。

就像您建议的那样,您可以通过在执行插入之前检查重复项来缓解这种情况 - 我这样做不仅是为了防止身份增加,而且也是为了防止您的 Sql Server 作为标准过程引发错误。

但是,可能还有其他特殊情况会导致插入失败……因此,如果 ID 中的间隙不仅仅是美学问题,那么标识列可能不是您要解决的问题的最佳解决方案。

于 2012-12-07T16:53:21.740 回答