Я вижу странное поведение, которое встречалось более одного раза для совершенно не связанных запросов.
Кажется, что оператор COMMIT TRANSACTION в запросе Sql игнорируется, несмотря на отсутствие ошибок, оставляя блокировку таблицы до тех пор, пока процесс не будет остановлен.
Вот один пример:
BEGIN TRY
BEGIN TRANSACTION
UPDATE Elements.ProductDeparture
SET DurationDays = 5,
FinishDate = DATEADD(day, 4, DepartureDate)
WHERE DepartureCode LIKE 'PPAF%'
AND ProductID = 2359
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT 'Error: ' + ERROR_MESSAGE()
ROLLBACK
END CATCH
Нет ошибки, выходящей из запроса (если вы выполняете его без транзакции, она завершается нормально). Поведение воспроизводимо (т. Е. Оно происходит каждый раз, когда выполняется вышеуказанный запрос, а не только периодически).
Это уже дважды происходило для совершенно не связанных запросов, выполняемых в транзакциях.
Вот странный бит. Мы запустили его в нашей среде разработки и тестовой среде без проблем. Запуск его в Production приводит к тому, что процесс не завершается, удерживая блокировку на столе, пока процесс не будет завершен. Все они являются средами SQL Server 2005.
Существуют ли какие-либо настройки базы данных SQL Server, которые могут вызывать это странное поведение? До сих пор примерно 5 разработчиков смотрели на это и никогда не видели ничего подобного.