我需要通过我正在开发的C#应用程序以特殊方式捕获违反UNIQUE
约束的行为。假设Error 2627
总是对应于此类违规行为,以便我可以使用
if (ThisSqlException.Number == 2627)
{
// Handle unique constraint violation.
}
else
{
// Handle the remaing errors.
}
答案 0 :(得分:119)
2627是唯一约束(包括主键),2601是唯一索引
SELECT * FROM sys.messages
WHERE text like '%duplicate%' and text like '%key%' and language_id = 1033
答案 1 :(得分:13)
这是我编写的一个方便的扩展方法来找到这些:
public static bool IsUniqueKeyViolation(this SqlException ex)
{
return ex.Errors.Cast<SqlError>().Any(e => e.Class == 14 && (e.Number == 2601 || e.Number == 2627 ));
}
答案 2 :(得分:4)
在近似值内,是的。
如果您搜索SQL Server的MS错误和事件站点,错误2627,您应该希望到达this page,这表示该消息将始终涉及重复的密钥违规(请注意哪些部分已参数化,哪些部分不):
Violation of %ls constraint '%.*ls'. Cannot insert duplicate key in object '%.*ls'.