Нарушение уникального ключа в SQL Server - Безопасно ли предполагать ошибку 2627? - PullRequest
66 голосов
/ 26 июня 2011

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

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

?

Ответы [ 3 ]

121 голосов
/ 26 июня 2011

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

SELECT * FROM sys.messages
WHERE text like '%duplicate%' and text like '%key%' and language_id = 1033
13 голосов
/ 18 декабря 2015

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

    public static bool IsUniqueKeyViolation(this SqlException ex)
    {
        return ex.Errors.Cast<SqlError>().Any(e => e.Class == 14 && (e.Number == 2601 || e.Number == 2627 ));
    }
4 голосов
/ 26 июня 2011

В пределах приблизительного значения да.

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

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