web-dev-qa-db-ja.com

SQL Serverの一意キー違反-エラー2627を想定しても安全ですか?

開発中のC#アプリケーションによる特別な方法でUNIQUE制約違反をキャッチする必要があります。 Error 2627は常にこの種の違反に対応すると想定するのは安全ですか?

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

67
User

2627は一意の制約(主キーを含む)、2601は一意のインデックスです

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

以下は、これらを見つけるために書いた便利な拡張メソッドです。

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

近似内で、はい。

MSエラーおよびイベントサイトでSQL Serverのエラー2627を検索する場合、 このページ に到達することを期待する必要があります。これは、メッセージが常に重複キー違反に関係することを示しますどちらでもない):

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