Ответ 1
2627 - это уникальное ограничение (включает первичный ключ), 2601 - уникальный индекс
SELECT * FROM sys.messages
WHERE text like '%duplicate%' and text like '%key%' and language_id = 1033
Мне нужно нарушать ограничения UNIQUE
специальным образом с помощью приложения С#, которое я разрабатываю. Можно ли предположить, что Error 2627
всегда будет соответствовать нарушению такого рода, так что я могу использовать
if (ThisSqlException.Number == 2627)
{
// Handle unique constraint violation.
}
else
{
// Handle the remaing errors.
}
?
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 и событий для SQL Server, ошибка 2627, вы должны, надеюсь, достичь этой страницы, что указывает на то, что сообщение всегда будет касаться дублированного нарушения ключа (обратите внимание, какие части параметризованы, а какие нет):
Violation of %ls constraint '%.*ls'. Cannot insert duplicate key in object '%.*ls'.