2015-10-23 4 views
2

У меня есть некоторые CRUD-операции в процедуре SQL, которые мне нужно установить в транзакции.Транзакция try/catch block - необходимо или нет?

BEGIN TRY 
    BEGIN TRANSACTION 
    --some statements 
    COMMIT TRANSACTION 
END TRY 
BEGIN CATCH 
    ROLLBACK TRANSACTION 
    --return ERROR_MESSAGE() as output parameter or in select, otherwise it will be supressed 
END CATCH 

Я вызываю эту процедуру из службы и этот вызов записывается внутри блока try. Мой вопрос: лучше ли писать эту часть процедуры без блока try/catch, так как мы поймаем исключение в методе catch block of method? Будет ли транзакция автоматически отменена после исключения? Я ошибаюсь?

ответ

0

The Catch & Откат отменяет любые изменения в базе данных, тогда как обработка исключений в WebService будет только ловить ошибку после ее возникновения - она ​​не коснется данных.

Вы можете автоматически откатить любые сбойные транзакции в SQL или запустить Transaction in the WebService, но просто перехват исключения в WebService не может повлиять на какие-либо данные, если вы явно не указали это.

+1

BEGIN TRANSACTION --some заявления --exception TRANSACTION COMMIT Вы говорите, что после исключения (в строке перед COMMIT) сделка не будет откат автоматически, или что? – bambi

+0

Будет, извините. Я имел в виду, что если вы не хотите, чтобы try-catch в SQL по какой-то причине вы могли использовать что-то вроде [XACT_ABORT] (https://msdn.microsoft.com/en-us/library/aa259192 (SQL.80) .aspx) (SQL Server). Однако я всегда использовал Try/catch, и я предполагаю, что это рекомендуемый подход. – dannymc18