開発中のC#アプリケーションによる特別な方法で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エラーおよびイベントサイトでSQL Serverのエラー2627を検索する場合、 このページ に到達することを期待する必要があります。これは、メッセージが常に重複キー違反に関係することを示しますどちらでもない):
Violation of %ls constraint '%.*ls'. Cannot insert duplicate key in object '%.*ls'.