Транзакции могут прерваться, вот что происходит.
Поскольку у вас снята как минимум 1 (или более) блокировка обновлений и некоторые из них являются блокировками чтения и сканирования таблиц, вас могут убить, чтобы освободить тупики, созданные другими транзакциями. Код восстановления взаимоблокировок в SQL Server вряд ли будет полностью свободен от ошибок, и ненормально держать транзакцию открытой в течение длительного времени на SQL Server. Однако я не ожидал бы, что это случится часто.
Некоторые системы, когда они отсоединяют проблему типа взаимоблокировки, просто начинают убивать «долгоживущие» транзакции, которые не выполнили сопоставительную работу, чтобы освободить блокировки. Тот факт, что вы не являетесь частью тупиковой петли, не останавливает вас.
Чтобы понять, что происходит в вашем случае , вам придется использовать Sql Server Profiler , чтобы собрать все события, связанные с блокировкой и взаимоблокировкой, а также событие об отмене хорошее соединение, транзакции и т. д. Хорошо, на это потребуется время и хороший уровень понимания событий профилировщика, на которые вы смотрите ...
Детали такого рода различны у разных поставщиков баз данных и версий их баз данных. Однако, поскольку большинство поставщиков баз данных считают плохой дизайн открытой транзакции в течение длительного времени, это может привести к проблемам и попаданию на пути кода, которые не были наиболее трудоемкими для тестирования.