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 は状況によっては役立ちますが、これは役に立ちません。
このエラーについて何か考えはありますか? どんな助けでも大歓迎です。
ありがとう、