Добрый день.
Есть вот такая конструкция в процедуре :
Дело в том, что даже при абсолютно нормальной работе куска кода, запрятанного в транзакцию, сервер не понимает, что с внешним oracle-сервером все прошло хорошо и все благополучно откатывает. Аналогичная конструкция с try..catch, но без транзакции отрабатывает отлично. Транзакция обязательна, там за <some code> еще много всего и оно все должно откатится в случае чего.
Вопрос: как дать ему понять, что все прошло прекрасно?
Есть вот такая конструкция в процедуре :
begin try begin tran tran_name <some_code_here> set @sql_com = 'select * from openquery([LINKED_SERVER_TO_ORACLE],''select SCHEME_NAME.GET_PARAMS('+cast(@num_id as varchar)+') from dual'')' exec sp_executesql @sql_com insert into out_results select XR."NUM_ID", XR."LINE_NUMBER", XR."RESULT" from LINKED_SERVER_TO_ORACLE..SCHEME_NAME.OUT_RESULT as XR delete from LINKED_SERVER_TO_ORACLE..SCHEME_NAME.OUT_RESULT <some_code_here> commit tran tran_name end try begin catch if @@trancount > 0 rollback tran tran_name set @err = 'GW ERROR: ' + error_message() exec dbo.LOG_TASK @num_id = @num_id, @message = @err, @log_level = 2 -- 2 - если ошибка raiserror(@err,16,1) return -1 end catch
Дело в том, что даже при абсолютно нормальной работе куска кода, запрятанного в транзакцию, сервер не понимает, что с внешним oracle-сервером все прошло хорошо и все благополучно откатывает. Аналогичная конструкция с try..catch, но без транзакции отрабатывает отлично. Транзакция обязательна, там за <some code> еще много всего и оно все должно откатится в случае чего.
Вопрос: как дать ему понять, что все прошло прекрасно?