Я вижу странное поведение, которое произошло более одного раза для совершенно несвязанных запросов.Ошибка транзакции SQL Server 2005
Оператор 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
Там нет ошибки, выходящей из запроса (если вы запускаете его без операции он завершает штраф). Поведение воспроизводится (т. Е. Оно происходит каждый раз, когда выполняется вышеуказанный запрос, а не просто прерывисто).
Это произошло дважды, для полностью несвязанных запросов, выполняемых в транзакциях.
Вот странный бит. Мы запустили его в нашей среде разработчиков и в нашей тестовой среде без проблем. Запуск в процессе производства приводит к тому, что процесс не завершается, удерживая блокировку на столе до тех пор, пока процесс не будет убит. Это все среды SQL Server 2005.
Существуют ли какие-либо параметры базы данных SQL Server, которые могут вызывать это странное поведение? До сих пор примерно 5 разработчиков смотрели на него и никогда не видели ничего подобного.
Deadlock? И если я правильно помню, 1 процесс не эквивалентен одному оператору SQL - процесс может использоваться несколькими соединениями. –