Транзакция изоляции моментального снимка прервана из-за конфликта обновления.Вы не можете использовать изоляцию моментальных снимков для прямого или косвенного доступа к таблице в базе данных, чтобы обновить, удалить или вставить строку, которая была изменена или удалена другой транзакцией.Повторите транзакцию или измените уровень изоляции для оператора update / delete.
Я прочитал другие проблемы, упомянутые здесь, но у меня это немного отличается, я просто пытаюсь прочитать некоторые данные с помощью оператора select, но если онивыбранные строки обновляются снаружи с помощью другой транзакции, тогда я получаю вышеуказанную ошибку конфликта.
Если я пытаюсь использовать подсказку LDPLOCK
, тогда она работает, но замедляет ее.Есть ли какое-нибудь решение для этого?
Практический пример ниже.
using (SqlConnection cn = new SqlConnection(connectionString))
{
await cn.OpenAsync();
using (SqlTransaction tran = cn.BeginTransaction(System.Data.IsolationLevel.Snapshot))
{
"select top 10 * from Employee where type = 1"
}
}
Теперь, если я также выполню обновление таблицы сотрудника до того, как будет выполнена вышеупомянутая фиксация перехода, он выдаст вышеуказанную ошибку.Который я не уверен почему, поскольку это только отборное утверждение.Я читал блоги Microsoft, что это создаст проблему, но нигде не смог найти решения.
update employee set IsActive = 1 where type = 1