SQL Server中的唯一键冲突 – 是否可以安全地使用Error 2627?
我需要通过我正在开发的C#应用程序以特殊方式捕获违反UNIQUE
约束的情况。 可以肯定的是, Error 2627
将总是对应于这种违反,以便我可以使用
if (ThisSqlException.Number == 2627) { // Handle unique constraint violation. } else { // Handle the remaing errors. }
?
2627是唯一约束(包含主键),2601是唯一索引
SELECT * FROM sys.messages WHERE text like '%duplicate%' and text like '%key%' and language_id = 1033
这是我写的一个方便的扩展方法来find这些:
public static bool IsUniqueKeyViolation(this SqlException ex) { return ex.Errors.Cast<SqlError>().Any(e => e.Class == 14 && (e.Number == 2601 || e.Number == 2627 )); }
在一个近似值内,是的。
如果您searchMS错误和事件站点的SQL Server,错误2627,您应该希望到达此页面 ,这表明该邮件将始终涉及重复键违规(请注意哪些部分参数化,哪些不是):
Violation of %ls constraint '%.*ls'. Cannot insert duplicate key in object '%.*ls'.