在主键列(表)中插入重复值时在 SQL Server 中返回哪个错误代码

Posted

技术标签:

【中文标题】在主键列(表)中插入重复值时在 SQL Server 中返回哪个错误代码【英文标题】:Which Error Code is return in SQL Server when inserting duplicate value in primary key column (table) 【发布时间】:2012-09-25 10:39:21 【问题描述】:

在主键列(表)中插入重复值时,SQL Server 中返回哪个错误代码

  try
     
         dataAdapterObj = new  SqlDataAdapter(selectString, conObj);
         return true;
     
     catch (Exception e)
     
         MessageBox.Show("Exception is : " + e.ToString());
         return false;
     

【问题讨论】:

***.com/questions/2403348/… 很容易测试不是吗? 【参考方案1】:

错误代码为 2627(违反 PRIMARY KEY 约束)

  try
     
      // do insert
     
  catch (SqlException e)
    
       if (e.Number == 2627)
           //do something
     

【讨论】:

供将来查看此内容的任何人使用。 2627 与 2601 非常不同。2601 是唯一键违规 A 2627 是主键违规。这意味着,如果您像我一样,您的大多数主键都使用身份值。这意味着你永远不应该得到 2627。【参考方案2】:

您要查找的错误代码是 2601。使用 SqlException.Number 属性

catch (SqlException e)

   MessageBox.Show(String.Format("Exception is 0 - 1", e.Number, e.Message)); 

【讨论】:

不是方法,是sql异常发生时抛出的SqlException对象可用的属性。 这段代码每次都相同还是不同? @ChrisGessler 在我的项目中,当主键中的重复值同时违反 2601 和 2627 时,SQL 服务器将返回 2627。由于您说 2601 将是主键中重复值时的错误代码,所以我寻求帮助here。我认为 2627 会是 OP 正在寻找的更合适的错误代码。你说什么?【参考方案3】:

2601

示例:无法在具有唯一索引“my_index_name”的对象“my_table_name”中插入重复的键行。

2627

示例:违反PRIMARY KEY 约束“my_constraint_name”。无法在对象“my_table_name”中插入重复键。

来源:https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/cc645728(v=sql.105)

【讨论】:

以上是关于在主键列(表)中插入重复值时在 SQL Server 中返回哪个错误代码的主要内容,如果未能解决你的问题,请参考以下文章

当主键列不是标识列时如何插入数据?

SQL:主键列。人工“Id”列与“Natural”列[重复]

Mysql命令整理

SQL:向数据库表添加新的主键列

sql server 中 怎么让自动增1的主键列 临时的 让它可以手动插入指定值?

sql主键列自增问题