1

UPDATE ステートメントの実行中にエラーが発生しました。

エラー:

更新の競合により、スナップショット分離トランザクションが中止されました。スナップショット分離を使用してデータベース 'myDatabase' のテーブル 'dbo.Companies' に直接または間接的にアクセスし、別のトランザクションによって変更または削除された行を更新、削除、または挿入することはできません。トランザクションを再試行するか、更新/削除ステートメントの分離レベルを変更してください。

声明:

UPDATE [ActiveSession] SET [LastActionExecutedAt] = GETDATE() WHERE [SessionID]=@id

ASP.NET アプリケーションを介して上記のステートメントを実行しました。

興味深いのは、ステートメントがトランザクションなしで実行されることです。コードは次のようになります。

using(var sqlconn = new SqlConnection("connection string")
using(var sqlcmd = sqlconn.CreateCommand())
{
    sqlconn.Open();
    sqlcmd.Parameters.Add("@id", SqlDbType.NVarChar).Value = id;

    sqlcmd.CommandText = "SELECT * FROM [ActiveSession] WHERE @id=id";
    using(var sqlreader = sqlcmd.ExecuteReader())
    {
        // read info
        reader.Close();
    }

    sqlcmd.CommandText = "UPDATE ....";
    Sqlcmd.ExecuteNonQuery();
}

私はグーグルで検索しましたが、SNAPSHOT分離レベルトランザクションを使用するとエラーが発生することがわかりました。しかし、取引はありません。

このスレッドで説明されているように、INDEXING は状況によっては役立ちますが、これは役に立ちません。

このエラーについて何か考えはありますか? どんな助けでも大歓迎です。

ありがとう、

4

1 に答える 1