У меня есть некоторые 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? Будет ли транзакция автоматически отменена после исключения? Я ошибаюсь?
BEGIN TRANSACTION --some заявления --exception TRANSACTION COMMIT Вы говорите, что после исключения (в строке перед COMMIT) сделка не будет откат автоматически, или что? – bambi
Будет, извините. Я имел в виду, что если вы не хотите, чтобы try-catch в SQL по какой-то причине вы могли использовать что-то вроде [XACT_ABORT] (https://msdn.microsoft.com/en-us/library/aa259192 (SQL.80) .aspx) (SQL Server). Однако я всегда использовал Try/catch, и я предполагаю, что это рекомендуемый подход. – dannymc18