Возможен ли следующий сценарий в SQL Server с одним активным подключением?
Внутри транзакции READCOMMITED мне нужно обновить одну таблицу, не блокируя ее. Например, каждый раз, когда я выполняю инструкцию, я увеличиваю поле в этой таблице. Эту операцию не нужно откатывать в случае сбоя транзакции. Кроме того, это обновление не должно блокировать других одновременных пользователей, которые пытаются обновить ту же позицию.





Вы не можете выполнить обновление без блокировки таблицы. Это необходимо для того, чтобы уровень изоляции ДРУГИХ транзакций мог контролировать, могут ли они «видеть» изменения, внесенные в обновление. Вы можете изменить уровень изоляции транзакции для обновления, но это влияет только на сеанс обновления (где вы его устанавливаете), контролируя, может ли обновление "видеть" изменения, сделанные в других сеансах ...
Если вы хотите, чтобы ДРУГИЕ операторы Sql могли видеть то, что вы делаете в этом обновлении, как если бы оно не было заблокировано, вам нужно изменить уровень изоляции транзакции для этих других tx на Read Uncommited. (Будьте осторожны ... Этот уровень изоляции может допускать многочисленные несоответствия в вашей базе данных.)
Вы не можете не заблокировать таблицу во время записи.
Вы имеете в виду, что хотите записать в таблицу, но при этом исключительная блокировка нет сохраняется до фиксации / отката?
Если это так, поместите нужные вам значения в переменную таблицы (на которую не влияет откат / фиксация) и отложите запись после основной транзакции. Затем выполните одно обновление, чтобы передать значение из табличной переменной.
Обновлено: Обходной путь SQL 2008, с другими идеями позже
Что касается вашего решения поместить его в переменную таблицы, скажем, у меня есть длинный SP, который вставляется в таблицу и получает значение IDENTITY для этой вставки, и теперь я делаю другие вещи в соответствии с этим значением .... Использование вашего решения Как бы я сделай это ? Я не думаю, что смогу это сделать. (У меня также есть длинный sp, который заставляет много ЦП отменять множество вставок на основе Identities, но я не хочу блокировать всю систему) ... Может ли ваше решение решить эту проблему?
tx, автономные транзакции действительно интересны.