SQL Server : Attempting to Insert a Duplicate Record Costs an Id

标签 sql sql-server

我设置了下表:

  • Id int pk,唯一不为空
  • 名称 varchar(50) 不为空
  • 与此问题无关的其他列

Name 上设置的索引是唯一且非聚集的。

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

我可能对此很挑剔,但每次尝试添加重复行都会导致 SQL Server 跳过本应分配的下一个 Id(如果新行是非重复行) 名称

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

最佳答案

不,没有设置可以阻止身份值在插入失败时递增。

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

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

关于SQL Server : Attempting to Insert a Duplicate Record Costs an Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13767322/

相关文章:

java - 为什么 hibernate 在最后添加到我的查询交叉连接

php - Laravel 中是否可以将 MS-SQL 连接到 MySQL

sql - 如何以一张表为基础连接Microsoft Access中的4张表?

sql - 使用连接等价查询?

mysql - SQL 多对多关系

mysql - 外部应用的替代方案

sql - SQL Server AlwaysOn 中的脏读

sql - Report Builder 中的表格

sql - 在 T-SQL (SQL Server 2008) 中连接到远程服务器

php - SQL 替换或插入语法错误