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


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

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

?

3 62

3 ответа:

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

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

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

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

в приближении, да.

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

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