SET Value = t.Value
From #tempFactorValue t
и второй такой же запрос но уже внутри транзакции
BEGIN TRAN
UPDATE FactorValue
SET Value = t.Value
From #tempFactorValue t
COMMIT TRAN
Накладывает ли тарнказция дополнительные несовместмые блокировки UIX и IU, что может послужить возникновению deadlock?
Да , накладывают.
У тебя две ровно одинаковые транзакции, если их выполнять в одно и то же время, то вполне вероятно, что они будут конфликтовать, и даже deadlock-читься.
в этом случае блокировка в обеих транзакциях с большой вероятностю поставится на таблицу. значит может произойти или отвал по таймауту одной из транзакция (если второй запрос оказался больше таймаута) или выполнится сперва один, потом второй (который пока выполнялся первый ожидал освобождения блокировки) можно попробовать получить таким запросом блокировку.. если попытаться добавить в оба запроса разные фильтры, которые на выходе дадут или одинаковые записи.. или еще лучше одинаковые страницы (pages) тогда думаю возможен дедлок. блокировки на таблицу не будет. будут лочится разные страницы\строки (обеих запросов паралельно) . и в какойто момет окажется что один запрос ожидает освобождения блокировки на запись\страницу залоченный вторым.. а второй так же ожидает запись\страницу залоченный первым но если честно надо играться, пробовать.
Тут , кстати, на тему об изоляции и блокировках, у тебя наверняка фиговые транзакции. Поскольку всё заваливается во временную таблицу и потом -- без никаких проверок -- обратно, в главную.
А СУБД какая у тебя, кстати?
Обсуждают сегодня