Подтвердить что ты не робот

Уникальное нарушение ключа в SQL Server. Можно ли предположить ошибку 2627?

Мне нужно нарушать ограничения UNIQUE специальным образом с помощью приложения С#, которое я разрабатываю. Можно ли предположить, что Error 2627 всегда будет соответствовать нарушению такого рода, так что я могу использовать

if (ThisSqlException.Number == 2627)
{
    // Handle unique constraint violation.
}
else
{
    // Handle the remaing errors.
}

?

4b9b3361

Ответ 1

2627 - это уникальное ограничение (включает первичный ключ), 2601 - уникальный индекс

SELECT * FROM sys.messages
WHERE text like '%duplicate%' and text like '%key%' and language_id = 1033

Ответ 2

Вот удобный метод расширения, который я написал, чтобы найти их:

    public static bool IsUniqueKeyViolation(this SqlException ex)
    {
        return ex.Errors.Cast<SqlError>().Any(e => e.Class == 14 && (e.Number == 2601 || e.Number == 2627 ));
    }

Ответ 3

В приближении да.

Если вы ищете сайт MS error и событий для SQL Server, ошибка 2627, вы должны, надеюсь, достичь этой страницы, что указывает на то, что сообщение всегда будет касаться дублированного нарушения ключа (обратите внимание, какие части параметризованы, а какие нет):

Violation of %ls constraint '%.*ls'. Cannot insert duplicate key in object '%.*ls'.