обработка транзакции ошибки, когда объекты не существуют

Я нашел статью в MSDN Lbrary, объясняющую, что try / catch не обрабатывает ошибки, возникающие, когда объект не может быть найден. Итак, даже если я заключу транзакцию в команду try / catch, фраза отката не будет выполнена:

BEGIN TRY
BEGIN TRANSACTION

    SELECT 1 FROM dbo.TableDoesNotExists
    PRINT ' Should not see this'
    COMMIT TRANSACTION
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION
    SELECT
            ERROR_MESSAGE()
END CATCH

--PRINT 'Error Number before go: ' + CAST(@@Error AS VARCHAR)

go
PRINT 'Error Count After go: ' + CAST(@@Error AS VARCHAR)
PRINT 'Transaction Count ' + CAST(@@TRANCOUNT AS VARCHAR)

Какой рекомендуемый способ обработки ошибок, возникающих, когда объект не существует, особенно когда есть транзакция. Следует ли мне использовать этот фрагмент кода вместо двух последних операторов печати:

IF @@ERROR <> 0 AND @@TRANCOUNT > 0
BEGIN   
    PRINT 'Rolling back txn'
    ROLLBACK TRANSACTION
END 

go

PRINT 'Transaction Count again: ' + CAST(@@TRANCOUNT AS VARCHAR)
6
задан gr928x 10 December 2010 в 16:47
поделиться