Уникальное нарушение ключа в SQL Server-можно ли с уверенностью предположить ошибку 2627?
Мне нужно поймать нарушение ограничений UNIQUE особым образом с помощью приложения C#, которое я разрабатываю. Можно ли с уверенностью предположить, что Error 2627 всегда будет соответствовать нарушению такого рода, так что я могу использовать
if (ThisSqlException.Number == 2627)
{
// Handle unique constraint violation.
}
else
{
// Handle the remaing errors.
}
?
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'.
Comments