2017-02-16 19 views
-2

Я читал на Уровнях изоляции транзакций, и я не уверен, что все правильно понимаю. Мне нужна помощь.Проблема с уровнем изоляции транзакции

Пожалуйста, обратите внимание на следующее Csharp псевдокод:

  1. Использование хранимой процедуры 1, открытую транзакцию
  2. Вставка или обновление таблицы 1
  3. Использование хранимой процедуры 2, вставки или обновления таблицы 2, на основе данных по таблице 1
  4. Обязательная сделка.

На шаге 3, как я могу не рассматривать данные, которые были обновлены на шаге 2? Должен ли я устанавливать уровень изоляции транзакций, когда я создаю транзакцию в своем .Net-коде. Вот псевдословный код хранимой процедуры SQL-сервера.

select @count=count(*) from table1; 
if @count > 1 
update table2 
+0

уточнить; вы хотите, чтобы шаг 3 отображал данные в таблице 1, как это было до шага 2? –

+0

@ DanDef: На уровне 10 000 футов это правда. На уровне 100 футов шаг 3 делает намного больше, и поэтому последовательность шагов не может быть изменена. –

ответ

1

Простое изменение заказа не разрешает вашу проблему? Я имею в виду, что если шаг 2 изменит данные Таблицы 1, и вам нужно, чтобы он был целым, чтобы выполнить Шаг 3, сначала выполните Шаг 3. Это будет выглядеть следующим образом:

  1. Open Transaction
  2. Выполнить процедуру 2
  3. Execute Процедура 1
  4. Закрыть Сделку

Учитывая то, что вы только что заметил, вы, вероятно, потребуется для использования IsolationLevel.Snapshot. Однако некоторые базы данных по умолчанию не включены. Он в основном создавал копию текущих данных в tempdb при обновлении исходной таблицы.

+0

На уровне 10 000 футов вы правы. На уровне 100 футов шаг 3 делает намного больше, и поэтому последовательность шагов не может быть изменена. –

0

Насколько я знаю, ни один из уровней изоляции не позволяет вам получить доступ к предыдущим версиям строки после их изменения.

Для достижения того, что вы просите, вам нужно будет изменить шаг 2, чтобы отслеживать, что он изменил, и сделать его доступным для шага 3. В противном случае вам нужно будет добавить триггеры в таблицы, измененные на шаге 2 и отслеживать изменения таким образом.

 Смежные вопросы

  • Нет связанных вопросов^_^