В SQL Server 2008R2, у нас есть хранимая процедура, которая выглядит следующим образом:Откат без исключения?
create procedure x(@arg1 as nvarchar(20), @arg2 ...)
as
begin
-- delete and insert values, depending on arguments
begin transaction;
delete from tblA where f1 = @arg1 ... ;
insert into tblB (a) select ... where f2 = @arg2 ... ;
commit transaction;
end;
Я называю эту процедуру в C# (.NET 4.5) с SqlCommand.ExecuteNonQuery()
методом. Все исключения пойманы с помощью try--- catch
Теперь в документации к этому методу говорится: «Если происходит откат, возвращаемое значение равно -1».
Вопрос: Может ли быть случай возврата, не получая исключения?
До сих пор у нас всегда было исключение, если оператор sql не мог быть выполнен. Но может ли быть случай, когда откат происходит «автоматически» без исключения?
hummm - Я думаю, что в зависимости от настройки XACT_ABORT вы можете добраться до состояния, в котором удаление выполнено, но вставка отсутствует. –
@MikeMiller И в этом случае процедура просто откат, а не исключение? –
Если задано неверно, процесс должен вызвать исключение и откат только вставки. –