在主键列(表)中插入重复值时在 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”列[重复]