Ой, кто-то где-то играет с огнем.
У меня никогда не было производственного сценария, где мне приходилось включать неявные транзакции. Я всегда открываю транзакции, когда они мне нужны, и фиксирую их, когда я закончу. Проблема с неявными транзакциями заключается в том, что действительно легко «утечь» открытую транзакцию, что может привести к ужасным проблемам. Этот параметр означает: «Пожалуйста, откройте для меня транзакцию при первом запуске оператора, если транзакция не открыта, не беспокойтесь о ее совершении».
Например, посмотрите на следующие примеры:
set implicit_transactions on
go
select top 10 * from sysobjects
И
set implicit_transactions off
go
begin tran
select top 10 * from sysobjects
Они оба делают одно и то же, однако во втором утверждении совершенно ясно, что кто-то забыл совершить транзакцию. Это может быть очень сложно отследить, если у вас есть этот набор в неясном месте.
Лучшее место для получения документации для всех операторов set - это старые надежные sql серверные книги онлайн . Это вместе с небольшим количеством экспериментов в анализаторе запросов - это обычно все, что требуется для понимания большинства настроек.
Я бы настоятельно рекомендовал вам выяснить, кто настраивает неявные транзакции, выяснить, зачем они это делают, и удалить настройку, если она действительно не требуется. Кроме того, вы должны подтвердить, что тот, кто использует этот параметр, фиксирует свои неявно открытые транзакции.
Что, вероятно, происходило, так это то, что у вас была открытая транзакция, которая блокировала часть вашего хранимого процесса, и где-то у вас был тайм-аут, который вызывал ошибку и обрабатывался в коде, когда этот тайм-аут случается сохраненный процесс продолжает работать. Я предполагаю, что задержка обычно составляет 30 секунд точно.