SQL Server中的唯一密钥冲突 - 假设错误2627是否安全?

时间:2011-06-26 11:47:11

标签: sql-server-2005 unique-constraint

我需要通过我正在开发的C#应用​​程序以特殊方式捕获违反UNIQUE约束的行为。假设Error 2627总是对应于此类违规行为,以便我可以使用

,这是否安全?
if (ThisSqlException.Number == 2627)
{
    // Handle unique constraint violation.
}
else
{
    // Handle the remaing errors.
}

3 个答案:

答案 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'.
相关问题